엑셀/VBA

엑셀 vba/다른 시트 데이터가져오기/문자열 포함 여부 확인 함수 활용/InStr

gongdol 2023. 8. 13. 22:03
300x250

다른 시트의 데이터를 가져와서 정리해보자. 

 

 

0. 예제 파일 작성하기

  1) 시트 3에는 3줄의 데이터를, 시트2에는 2줄의 데이터, 시트1에는 1줄의데이터를 작성하고,

      summary 탭에 데이터들을 모아보자.

 

1. 코드작성

   1) 다른 시트의 데이터들을 모아서 시트이름과 함께 작성해보자.

   2) sheet 라는 문자열이 시트이름에 포함되어 있어야 코드가 진행된다.(InStr)

       -. InStr 는 문자열이 없으면 0을 출력한다. 

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
 
Sub 다른시트데이터가져오기()
    Dim ws_count As Integer
    Dim ws_name As String
    
    ws_count = Worksheets.Count
    data_ct = 0
    
    For n = 1 To ws_count
        ws_name = Sheets(n).Name
        
        'summery sheet 에 데이터 정리하기
        For k = 0 To 5
        
            ' 데이터 유무 확인위치
                data_position = 3 * k + 2
                
            '내가 원하는 시트인지, 가져올 데이터가 있는지 확인
            If InStr(ws_name, "Sheet") > 0 And Sheets(ws_name).Cells(2, data_position) > 0 Then
            
                '데이터 정리 offset
                data_ct = data_ct + 1
                
                
                'MsgBox (data_ct)
                'MsgBox (data_ct_sheet - 1 + data_ct)
                
                'summary 시트에 데이터를 요약하자
                With Sheets("summary").Cells(2, 2)
                    ' 시트이름가져오기
                    .Offset(0, data_ct - 1) = ws_name
 
                    '시트 데이터 가져오기
                    .Offset(1, data_ct - 1) = Sheets(ws_name).Cells(2, 3 * k + 2)
                    .Offset(2, data_ct - 1) = Sheets(ws_name).Cells(3, 3 * k + 2)
                    .Offset(3, data_ct - 1) = Sheets(ws_name).Cells(4, 3 * k + 2)
                    
                End With
            
            End If
        Next
 
 
    Next
 
End Sub
 
cs

 

2. 결과

300x250