엑셀/VBA

엑셀 vba/데이터 한열에 정리하기

gongdol 2023. 11. 12. 12:30
300x250

1. 코드작성하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Sub convert_data_tocolumn()
 
    Dim COPYRANGE As Range
    Dim pasteRANGE As Range
    Dim i As Integer
    
 
    Set COPYRANGE = Application.InputBox("변경시킬데이터 선택", Type:=8)
    Set changeRANGE = Application.InputBox("변경된 데이터 한 셀 선택", Type:=8)
 
    i = 0
    
    Application.ScreenUpdating = False
    
    For Each Rng In COPYRANGE.Rows
        Rng.Copy
        changeRANGE.Offset(i, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
        i = i + Rng.Columns.Count
    Next
    
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    
End Sub
cs

 

2. 결과

 결과

 

 

 

3. 추가 코드 작성하기

   1) 옆에 인덱스를 해주자. 1번이 3번씩 반복이므로, 111,222,333 이런식으로 인덱스해주자.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Sub convert_data_tocolumn()
 
    Dim COPYRANGE As Range
    Dim pasteRANGE As Range
    Dim i As Integer
    
 
    Set COPYRANGE = Application.InputBox("변경시킬데이터 선택", Type:=8)
    Set changeRANGE = Application.InputBox("변경된 데이터 한 셀 선택", Type:=8)
 
    i = 0
    p = 1
    Application.ScreenUpdating = False
    
    For Each Rng In COPYRANGE.Rows
        Rng.Copy
        changeRANGE.Offset(i, 0).PasteSpecial Paste:=xlPasteAll, Transpose:=True
        
        changeRANGE.Offset(i, -1).Value = p
        changeRANGE.Offset(i + 1-1).Value = p
        changeRANGE.Offset(i + 2-1).Value = p
        i = i + Rng.Columns.Count
        p = p + 1
    Next
    
    Application.CutCopyMode = False
    Application.ScreenUpdating = True
    
End Sub
cs

 

4. 결과

300x250