모폴더 내 자폴더 복수파일 데이터합침 (VBA)

VBA
작성자
H.B
작성일
2021-12-16 17:23
조회
121
엑셀버전 : M365

운영체제 : 윈도우10

안녕하세요.

하기와 같이 한개 폴더내에 복수폴더가 존재하고, 그 각각의 폴더에 엑셀파일이 여러개 있을때,

모폴더를 선택해서 안의 폴더내 모든 엑셀파일 데이터를 하나로 합치고 싶습니다.

 

첨부파일의 VBA를 나름대로 만들어봤습니다만, 한파일에 시트형식으로 모두 넣는건 어찌저찌 됬습니다만,

제가 필요한건 한 시트에 각각폴더의 엑셀 데이터를 합치고 싶은데 혹시 방법이 있을까요???

(오빠두님의 시트합침, 데이터합칩 파일로는 한폴더내의 파일만 가능해서요,,, 제가 필요한건 하기처럼 상위폴더를 선택해서 하위각각폴더의 파일들을 한번에 합치고 싶습니다)

 

전체 6

  • 2021-12-16 18:49

    꼭 VBA를 사용하셔야 하는 상황일까요?

    M365를 사용중이시라면 파워쿼리를 사용해서 더 쉽게 해결할 수 있을 듯 합니다. 속도도 훨씬 빠르구요


  • 2021-12-16 19:11

    꼭 vba를 사용하여야 하는 상황입니다. 모 폴더경로가 매번 변경되서 파워쿼리로는 대응이 불가능하네요. (파워쿼리도 생각은 해봤습니다만)

    나름대로 만들어봤습니다만, 한폴더내에 복수폴더가 있고 그 폴더안의 엑셀을 다 한시트로 데이터를 합치고 싶습

    니다만....


  • 2021-12-16 22:44

    지금 첨부하신 파일의 메크로는 만약 예를들어 바탕화면의 Test폴더가 있을 경우 경로는 C:\Users\Desktop\Test가 되고

    이 Test의 한 단계 아래에 있는 파일들만 불러옵니다.

    예를들면 C:\Users\Desktop\Test\Test1.xlsx 이런식으로 말입니다.

    그런데 하위폴더안의 하위폴더 즉 C:\Users\Desktop\Test\TestFolder 이런식으로 폴더안의 하위폴더가 존재하는경우 위의 메크로는 그 파일은 찾지 못하는데 그냥 한 단계 아래의 파일만 검색하는 구성으로 가는 방향이신가요?


    • 2021-12-16 22:51

      @iviolin**** 님 그리고 모든 파일을 한 파일로 합치셨으면 오빠두님의 시트합침도 사용가능할 것 같은데 어디가 문제가되어 사용을 못하시는거죠?


  • 2021-12-17 01:09
    채택된 답변

    H.B님 안녕하세요?^^

    아래 함수를 사용하면 하위 폴더를 모두 포함한 파일 경로를 받아올 수 있습니다.

    Arr = ListFiles("경로",True,True)

    로 사용해보세요.

    '###############################################################
    '오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
    '▶ ListFiles 함수
    '▶ 선택한 폴더의 파일목록을 배열로 반환합니다.
    '▶ 인수 설명
    '_____________sPath     : 파일목록을 출력할 폴더입니다.
    '_____________withPath  : TRUE일 경우 폴더 경로를 함께 표시합니다. 기본값은 FALSE 입니다.
    '_____________includeChild  : TRUE일 경우 하위 폴더의 파일도 모두 포함하여 출력합니다. 기본값은 FALSE 입니다.
    '###############################################################
    
    Function ListFiles(sPath As String, Optional withPath As Boolean = False, Optional includeChild As Boolean = False)
    
    ' 변수를 선언합니다.
    Dim dictFiles As Object
    Dim arr As Variant
    Dim i As Long: Dim x As Long
    Set dictFiles = CreateObject("Scripting.Dictionary")
    
    ' 폴더 내 파일 경로를 Dictionary 에 추가합니다.
    ListFiles_Routine dictFiles, "C:\Users\오빠두엑셀\Desktop\test", True, includeChild
    
    ' Dictionary가 비어있을 경우 #NULL 오류를 반환하고 그렇지 않을 경우 다음 단계로 넘어갑니다.
    On Error GoTo EH:
    ReDim arr(1 To dictFiles.Count)
    
    ' Dictionary를 배열로 변환합니다.
    arr = dictFiles.items
    
    ' withPath가 False일 경우 폴더 경로를 제거합니다.
    If withPath = False Then
            For x = LBound(arr) To UBound(arr)
                i = InStrRev(arr(x), "\")
                arr(x) = Mid(arr(x), i + 1, Len(arr(x)))
            Next
    End If
    
    ' 파일 경로를 반환 후 함수를 종료합니다.
    ListFiles = arr
    
    Exit Function
    
    EH:
    ListFiles = "#NULL!"
    
    End Function
    Sub ListFiles_Routine(dict As Object, sPath As String, Optional withPath As Boolean = False, Optional includeChild As Boolean = True)
     
    Dim oFSO As Object: Dim oFolder As Object: Dim oFiles As Object: Dim oFile As Object
    Dim oSubFolder As Object
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(sPath)
    Set oFiles = oFolder.Files
     
    If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
    
    For Each oFile In oFiles
        If withPath = False Then dict.Add oFile.Name, oFile.Name Else: dict.Add sPath & oFile.Name, sPath & oFile.Name
    Next
    
    If includeChild = True Then
        For Each oSubFolder In oFolder.SubFolders
            ListFiles_Routine dict, sPath & oSubFolder.Name, True, True
        Next
    End If
    
    End Sub
    

    제시해드린 답변이 문제 해결에 도움이 되셨길 바랍니다.^^ 감사합니다.


  • 2021-12-17 09:40

    답변 달아주신 모든 분께 감사드립니다^^. 항상 도움받아서 대단히 감사합니다^^!!!!


전체 5,225
번호 카테고리 제목 작성자 작성일 추천 조회
알림
하루 딱 "1분", 진짜 쓰는 엑셀 꿀팁 👉 "오빠두엑셀" 인스타그램 오픈! (32)
트로피 오빠두엑셀 | 2021.10.12 | 추천 23 | 조회 828
트로피 오빠두엑셀 2021.10.12 23 828
공지사항 공지사항
⭐ [더 나은 커뮤니티 문화를 위한 Q&A 글 작성 규칙] ⭐ (23)
오빠두엑셀 | 2021.10.28 | 추천 33 | 조회 2504
트로피 오빠두엑셀 2021.10.28 33 2504
26468 함수/공식
New 똑같은 수식으로 텍스트의 바이트수를 계산하는데 다르게 나옵니다.ㅠ 첨부파일
turtle**** | 2022.01.26 | 추천 0 | 조회 20
turtle**** 2022.01.26 0 20
26466 VBA
New 재고관리 filtered_db 함수 사용관련 질문입니다. (db가 empty인 경우 사용법)
탄만두 | 2022.01.26 | 추천 0 | 조회 20
탄만두 2022.01.26 0 20
26462 VBA
New VBA오빠두님의 Listfiles함수 중에 (1)
H.B | 2022.01.26 | 추천 1 | 조회 22
H.B 2022.01.26 1 22
26460 VBA
New vba 일치하는 값 찾기 질문 드립니다. 첨부파일 (1)
qkrwo**** | 2022.01.26 | 추천 0 | 조회 23
qkrwo**** 2022.01.26 0 23
26454 VBA
New Excel VBA _ Select 하지않고 바로 작업하는 방법 (2) 답변완료
백일호 | 2022.01.26 | 추천 1 | 조회 35
백일호 2022.01.26 1 35
26444 VBA
New 네이버 웹페이지 특정 정보 가져오기 질문
엑셀초보(LV.1) | 2022.01.26 | 추천 0 | 조회 18
엑셀초보(LV.1) 2022.01.26 0 18
26441 VBA
New vba 코딩으로 다른 시트 데이터 가져오기 질문입니다. 첨부파일 (2) 답변완료
qkrwo**** | 2022.01.26 | 추천 0 | 조회 36
qkrwo**** 2022.01.26 0 36
26440 피벗테이블
New 3개의 피벗테이블 필터 값을 동시에 변경하는 방법이 알고 싶어요 첨부파일
forest choi | 2022.01.26 | 추천 0 | 조회 26
forest choi 2022.01.26 0 26
26439 VBA
New VBA 네이버 부동산 크롤링 질문 (1)
엑셀초보(LV.1) | 2022.01.26 | 추천 0 | 조회 25
엑셀초보(LV.1) 2022.01.26 0 25
26421 문서서식
New 엑셀과 워드 메일머지 강의에는 예제파일이 없나요?
pcs**** | 2022.01.26 | 추천 0 | 조회 27
pcs**** 2022.01.26 0 27
26420 함수/공식
New 회원자료실 커스텀 일정표에서 조건추가하여 사용하고싶은데 질문있습니다 !
창동명 | 2022.01.26 | 추천 0 | 조회 30
창동명 2022.01.26 0 30
26410 피벗테이블
New 피벗 테이블에서 취소선을 표현하는 방법 첨부파일 (1)
퉁퉁이 | 2022.01.25 | 추천 0 | 조회 45
퉁퉁이 2022.01.25 0 45
26408 기능/도구
New 표에서 바로만든 슬라이서도 보고서연결 기능과 비슷하게 만들 수 있나요? (2)
차가운열매 | 2022.01.25 | 추천 0 | 조회 37
차가운열매 2022.01.25 0 37
26405 함수/공식
New 최고점/최저점 찾아내기 첨부파일 (9) 답변완료
km**** | 2022.01.25 | 추천 0 | 조회 57
km**** 2022.01.25 0 57
26403 VBA
New VBA를 이용하여 euc-kr로 인코딩된 site 크롤링 방법
콩순이 | 2022.01.25 | 추천 0 | 조회 28
콩순이 2022.01.25 0 28
26401 VBA
New 목표값 계산 자동 매크로 방법 첨부파일 (1)
박우성 | 2022.01.25 | 추천 0 | 조회 41
박우성 2022.01.25 0 41
26399 피벗테이블
New 데이터 새로고침 시 피벗테이블 연결 오류 첨부파일 (1)
유정 | 2022.01.25 | 추천 0 | 조회 27
유정 2022.01.25 0 27
26392 함수/공식
New MINIFS 함수 사용시 0으로 값 반환됨 (초보자에게 도움 부탁드립니다...ㅜㅜ) 첨부파일 (3) 답변완료
김원석 | 2022.01.25 | 추천 0 | 조회 38
김원석 2022.01.25 0 38
26387 VBA
New VBA 엑셀에서 다른 프로그램 실행하기 (2) 답변완료
병욱 | 2022.01.25 | 추천 0 | 조회 38
병욱 2022.01.25 0 38
26378 피벗테이블
New 피벗테이블 집계 오류 (5) 답변완료
가을남자 | 2022.01.25 | 추천 0 | 조회 46
가을남자 2022.01.25 0 46
26371 VBA
New VBA 항목별 행렬전환 문의 첨부파일 (6) 답변완료
H.B | 2022.01.25 | 추천 1 | 조회 47
H.B 2022.01.25 1 47
26368 문서서식
New 셀에 입력시 자음 모음 분리문제 (1)
흑형 | 2022.01.25 | 추천 0 | 조회 31
흑형 2022.01.25 0 31
26366 VBA
New ■ 셀에 삽입된 메모 수량 카운팅하는 방법 첨부파일 (5) 답변완료
비스타 | 2022.01.25 | 추천 1 | 조회 56
비스타 2022.01.25 1 56
26360 함수/공식
New 엑셀 데이터통합 기능 이용시 합계가 달라지는 이유 첨부파일 (5)
wlfl**** | 2022.01.25 | 추천 0 | 조회 52
wlfl**** 2022.01.25 0 52
26343 함수/공식
New 전산입고품목과 실제입고품목의 실재고조사관련 양식(함수+피벗테이블)첨언좀 부탁드립니다.도와주세요! 첨부파일 (4) 답변완료
sunjong**** | 2022.01.24 | 추천 0 | 조회 74
sunjong**** 2022.01.24 0 74
26341 VBA
New VBA 내 배열 통합(쿼리 통합 기능을 VBA에서 구현하고자 합니다.) 첨부파일 (1)
병욱 | 2022.01.24 | 추천 0 | 조회 40
병욱 2022.01.24 0 40
26339 VBA
New 많은 텍스트상자안 문자 찾기 (4)
noeu**** | 2022.01.24 | 추천 -1 | 조회 55
noeu**** 2022.01.24 -1 55
26338 함수/공식
New 지정한 일수(days)를 달력에 자동으로 표시 되게끔 설정이 가능한가요? 첨부파일 (3) 답변완료
말창 | 2022.01.24 | 추천 0 | 조회 60
말창 2022.01.24 0 60
함수/공식
New Re:지정한 일수(days)를 달력에 자동으로 표시 되게끔 설정이 가능한가요? (1)
Lucas's | 2022.01.24 | 추천 0 | 조회 36
Lucas's 2022.01.24 0 36
26336 함수/공식
New 셀안 동일 회사명을 순차 카운트를 하고 싶습니다. (3) 답변완료
sickp**** | 2022.01.24 | 추천 0 | 조회 34
sickp**** 2022.01.24 0 34
26334 함수/공식
New 이름만 치면 열 다 띄워주는 방법을 알려주세요 첨부파일 (8) 답변완료
아마테라스 | 2022.01.24 | 추천 0 | 조회 63
아마테라스 2022.01.24 0 63