VB(A)

다른 엑셀파일의 데이터 가져오기

당근쨈 2015. 5. 16. 23:47

데이터가 띄엄띄엄 있어서 ADO로 불러오기엔 까다롭다.

일단은 파일을 열어서 데이터를 가져오는 매크로


Option Base 1
Option Explicit
Sub getData()
 
    Dim rngIm As Range
    Dim strPath As String
    Dim strFile As String
    Dim varData As Variant
    Dim cntFile As Integer
    Dim i As Integer, j As Integer
    Dim wbOld As Workbook
    Dim wbNew As Workbook
 
    Application.ScreenUpdating = False
 
    '변수설정
    Set rngIm = Range("A3")
    Set wbOld = ActiveWorkbook
 
    '현재 파일과 같은 폴더로 변경
    ChDir wbOld.Path
 
    '기존자료 삭제
    rngIm.CurrentRegion.Offset(1).ClearContents
 
    '폴더 선택
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
 
        '폴더 선택 안 하면 매크로 종료
        If .SelectedItems.Count = 0 Then Exit Sub
        strPath = .SelectedItems(1& "\"
    End With
    '폴더 내의 엑셀파일을 불러오고, 파일이 없으면 매크로 종료
    strFile = Dir(strPath & "*.xls*")
    If strFile = "" Then Exit Sub
    '폴더 내 엑셀파일 개수 카운트
    Do While strFile <> ""
        cntFile = cntFile + 1
        strFile = Dir()
    Loop
    '파일 개수만큼 배열 설정
    ReDim varData(cntFile, 9)
    strFile = Dir(strPath & "*.xls*")
    '폴더 내 모든 엑셀파일을 순환
    i = 1
    Do While strFile <> ""
        Set wbNew = Workbooks.Open(strPath & strFile)
        varData(i, 1) = i   '순
        varData(i, 2) = Range("I3") '일자
        varData(i, 3) = Range("B5") '이름
        For j = 1 To 6  '정상~합계
            varData(i, 3 + j) = Cells(7, j * 2)
        Next j
        wbNew.Close savechanges:=False
        i = i + 1
        strFile = Dir()
    Loop
    '셀에 자료 입력
    rngIm.Resize(cntFile, 9) = varData
    Application.ScreenUpdating = True
End Sub

cs



취합본.xlsm


변사또.xlsx


성춘향.xlsx


이몽룡.xlsx


홍길동.xlsx


'VB(A)' 카테고리의 다른 글

중복된 것은 표시해주면서 하나만 뿌림  (0) 2015.07.27
그룹별 오름차순 정렬 v2  (0) 2015.07.27
한글로 된 텍스트파일 불러오기  (0) 2015.05.16
2중 VLOOKUP  (0) 2015.05.15
그룹으로 내림차순  (0) 2015.05.15