엑셀 여러 파일 합치기: 파일 100개를 1초 안에, 검산까지

직접 해 본 결과

합친 파일 원본 3,836행
100개
걸린 시간 3회 실행 0.90~0.91초
0.9초
검산으로 찾은 오류 첫 버전이 놓친 합계 행
1건

이 글의 파일

같은 양식의 엑셀 파일은 엑셀 2016 이상이라면 파워 쿼리(엑셀의 데이터 불러오기 도구)의 ‘폴더에서’ 기능으로 합칠 수 있습니다. 양식이 조금씩 다르거나 합친 결과를 검산까지 하고 싶다면 파이썬 스크립트가 편합니다. 합성 파일 100개(3,836행)로 직접 해 보니 파이썬은 1초가 안 걸렸고, 검산으로 잘못 섞인 합계 행 1개를 찾았습니다.

시연 영상 명령 한 줄 실행부터 결과 검산까지 15초에 보여 줍니다. 실제 화면 캡처로 다시 구성했습니다.

이런 분께 / 준비물

지점별·월별·담당자별로 같은 양식의 파일을 받아 매번 한 표로 모으고 있다면 이 방법이 맞습니다.

  • 합칠 파일을 한 폴더에 모아 둡니다. 다른 파일은 섞지 않습니다.
  • 파워 쿼리 방법: Windows용 엑셀 2016 이상 또는 Microsoft 365
  • 파이썬 방법: Windows에 Python 설치, 이 글의 스크립트

먼저 고르기: 파워 쿼리와 파이썬

양식이 똑같으면 파워 쿼리, 양식이 조금씩 다르거나 엑셀 2010·2013이면 파이썬을 고릅니다.

항목파워 쿼리파이썬 스크립트
필요한 것Windows용 엑셀 2016 이상Python 설치 + 스크립트
열 순서가 다른 파일열 이름으로 맞춰 줌열 이름으로 맞춰 줌
열 이름이 다른 파일공식 안내는 같은 열 이름이 전제같은 열로 볼 이름 한 줄 추가
합계·소계·총계 행, 빈 행공식 안내에 처리 방법 없음자동으로 건너뜀
새 파일이 오면새로 고침스크립트 다시 실행
직접 해 본 범위공식 문서 확인만합성 파일 100개 실측

1단계 합치기 전에 파일 상태 확인하기

합치기 전에 네 가지만 보면 대부분의 오류를 막을 수 있습니다.

  • 열 이름: 같은 내용인데 이름만 다른 열이 있는지 봅니다. 예: ’수량’과 ‘판매수량’
  • 합계 행: 맨 아래에 합계를 적어 둔 파일이 있으면, 합칠 때 데이터처럼 섞여 들어갑니다.
  • 빈 행: 중간에 빈 줄이 있는 파일이 있는지 봅니다.
  • 잠금 파일: 엑셀로 파일을 열어 둔 채 복사하면 이름이 ~$로 시작하는 파일이 같이 생길 수 있습니다. 합치기 전에 지웁니다.
엑셀에서 연 지점001_2026-09.xlsx. 날짜, 지점, 품목, 수량, 단가, 금액 6개 열에 9월 판매 행이 들어 있다
합치기 전 파일 하나(합성 데이터). 일부 파일은 열 순서나 열 이름을 일부러 다르게 섞어 두었습니다.

2단계 파워 쿼리로 합치기 (Windows용 엑셀 2016 이상)

폴더를 지정하면 엑셀이 안의 파일을 한 표로 합쳐 줍니다.

메뉴는 Microsoft 영문 안내 기준으로 Data > Get Data > From File > From Folder 순서입니다. 한국어 엑셀에서는 데이터 탭에서 같은 순서로 찾습니다(버전마다 이름이 조금 다를 수 있음).

  1. 합칠 파일이 있는 폴더를 고릅니다.
  2. 파일 목록이 보이면 ’결합 및 로드’를 누릅니다. 합치기 전에 열을 다듬으려면 ’데이터 결합 및 변환’을 고릅니다.
  3. 합친 결과가 워크시트로 불러와집니다.

공식 문서가 밝힌 조건은 이렇습니다.

  • 파일마다 열 머리글, 데이터 형식, 열 수가 같아야 합니다.
  • 열 순서는 달라도 됩니다. 열 이름으로 맞추기 때문입니다.
  • 폴더 안의 모든 파일이 합쳐집니다. 상관없는 파일은 미리 빼 둡니다.

3단계 파이썬으로 합치기

스크립트 하나를 내려받아 명령 세 줄로 실행합니다.

파일 100개(원본 3,836행)를 merge.py가 열 이름으로 맞추고 합계·빈 행을 건너뛰어 3,836행 결과 파일로 합친 뒤, 파일별 행 수 검산에서 100개 모두 일치한 흐름도
이 단계에서 하는 일. 결과 파일 행 수를 원본과 대조하는 검산까지 포함합니다.
  1. Python을 설치합니다. 공식 문서가 권장하는 ’Python install manager’를 python.org 또는 Microsoft Store에서 받습니다.
  2. 명령 프롬프트(글자로 명령을 입력하는 창)를 엽니다. 시작 메뉴에서 cmd를 검색하면 나옵니다.
  3. pip(파이썬 부품을 설치하는 도구)으로 엑셀 파일을 다루는 부품 openpyxl을 설치합니다.
python -m pip install openpyxl
  1. merge.py를 내려받아, 합칠 파일이 든 폴더와 같은 곳에 나란히 둡니다. 예를 들어 바탕 화면에 samples 폴더와 merge.py를 함께 둡니다.
  2. 명령 프롬프트에서 그곳으로 이동합니다. 파일 탐색기 주소창의 경로를 복사해 cd /d 뒤에 붙여 넣고 Enter를 누릅니다. /d를 붙이면 다른 드라이브여도 됩니다. 네트워크 폴더(\\서버\...)에 있는 파일은 내 PC로 복사한 뒤 실행합니다.
cd /d C:\Users\내이름\Desktop
  1. 스크립트를 실행합니다. samples 자리에 합칠 파일이 든 폴더 이름을 씁니다. 폴더 이름에 띄어쓰기가 있으면 python merge.py "9월 판매"처럼 따옴표로 감쌉니다.
python merge.py samples

실행하면 폴더 바로 바깥에 samples_합친결과.xlsx처럼 ’폴더이름_합친결과.xlsx’가 생깁니다. 결과를 같은 폴더에 두면 다음에 실행할 때 결과 파일까지 합쳐지기 때문입니다. 맨 오른쪽 ‘원본파일’ 열에 각 행이 어느 파일에서 왔는지 남습니다.

합친 결과 파일을 엑셀에서 연 화면. 맨 오른쪽 G열 원본파일에 지점001_2026-09.xlsx처럼 각 행의 출처 파일명이 들어 있다
합친 결과(samples_합친결과.xlsx). 맨 오른쪽 원본파일 열로 행마다 출처를 확인할 수 있습니다.

화면에는 이런 요약이 나옵니다.

파일 100개, 가져온 행 3836개, 건너뛴 행 7개, 0.90초 → samples_합친결과.xlsx
명령 프롬프트에서 python merge.py samples를 실행한 화면. 파일 100개, 가져온 행 3836개, 건너뛴 행 7개, 0.93초가 표시된다
실제 실행 화면. 이번 실행은 0.93초였고, 앞서 3회 잰 값은 0.90~0.91초였습니다. 시간은 PC 성능에 따라 다릅니다.

문제가 있는 파일은 ’확인 필요’로 따로 알려 줍니다. 열 이름이 맞지 않는 파일은 건너뛰고, 빈 칸이나 문자로 된 숫자가 있는 행은 합치되 몇 행인지 알려 줍니다.

  확인 필요: 지점037_2026-09.xlsx (없는 열: 수량)

이때는 merge.py를 메모장으로 엽니다(마우스 오른쪽 버튼 → 연결 프로그램 → 메모장. 더블클릭하면 실행될 수 있습니다). 위쪽 ALIASES 줄(같은 열로 볼 이름)을 아래처럼 고쳐 저장한 뒤 다시 실행합니다.

ALIASES = {'판매수량': '수량', '판매 수량': '수량'}

4단계 합친 뒤 검산하기

합친 행 수가 원본 파일의 데이터 행 수 합과 같은지 확인합니다.

  • 파일이 적으면 원본마다 데이터 행 수를 세어 더합니다.
  • 피벗 테이블로 파일별 행 수를 셉니다. 결과 표를 선택하고 삽입 → 피벗 테이블을 고릅니다. ’원본파일’을 행에, 다른 열 하나를 값(개수)에 넣습니다.
  • 어느 한 파일만 숫자가 1~2개 많다면 합계 행이 섞였을 가능성이 큽니다.
  • 원본에 없는 파일 이름이 보이면 다른 파일(예: 예전 결과 파일)이 폴더에 섞인 것입니다.
합친 결과 파일의 마지막 부분. 마지막 데이터 행 번호가 3837이고 지점100 파일의 행으로 끝난다
마지막 행 번호 3837 = 머리글 1행 + 데이터 3,836행. 원본 행 수의 합과 같습니다.

직접 해 본 결과

가상의 지점 100곳 판매 파일을 만들어 합쳐 봤습니다. 실제 회사 자료가 아닌 합성 데이터입니다.

Windows 11, Python 3.14.4, openpyxl 3.1.5. 원본 데이터는 3,836행. 첫 버전·최종은 3회, 나머지는 1회 실행. 시간은 PC 성능에 따라 다름
실행가져온 행건너뛴 행소요 시간
첫 버전 (합계 행을 날짜 열에서만 찾음)3,837 (1행 많음)60.88초
예전 결과 파일 사본이 폴더에 남은 경우7,672 (2배)81.47초
최종 (모든 칸에서 찾고, 결과는 폴더 밖에 저장)3,836 (정확)70.90~0.91초
최종에서 같은 열 이름 설정을 지운 경우3,807 (머리글이 다른 파일 1개 건너뜀)70.91초
측정 조건 Windows 11, Python 3.14.4, openpyxl 3.1.5. 원본 데이터는 3,836행. 첫 버전·최종은 3회, 나머지는 1회 실행. 시간은 PC 성능에 따라 다름 측정일
  • 일부러 섞은 문제: 열 순서가 다른 파일 5개, 머리글 이름이 다른 파일 1개, 빈 행 3개, 합계 행 4개, 잠금 파일 1개
  • 까다로운 입력 17가지로도 돌려, 멈추지 않고 ’확인 필요’로 알리도록 고쳤습니다.
  • 첫 버전은 ‘날짜’ 열에서만 ’합계’를 찾았습니다. 열 순서가 다른 한 파일에서는 ’합계’가 맨 앞 ‘품목’ 열에 있어서 놓쳤습니다. 파일별 행 수를 원본과 맞춰 보다가 찾았습니다.

주의할 점과 한계

  • 파워 쿼리는 이 글을 쓴 환경(엑셀 2010)에 없어 직접 실행하지 못했습니다. 2단계는 Microsoft 공식 문서를 기준으로 썼습니다.
  • 스크립트는 각 파일의 첫 번째 시트만 읽습니다.
  • 어느 칸이든 값이 ‘합계’·‘소계’·‘총계’(띄어쓰기 무시)인 행은 건너뜁니다. 품목 이름이 이 단어인 데이터가 있다면 빠질 수 있습니다.
  • 병합 셀·저장하지 않은 수식은 값이 비어 들어갈 수 있어 ’확인 필요’로 알려 줍니다.
  • 회사 문서 보안(DRM)이 걸린 파일은 열 수 없습니다. 보안을 해제해 저장한 사본으로 합칩니다.

자주 묻는 질문

엑셀 2010을 쓰는데 파워 쿼리 메뉴가 없습니다.

엑셀 2010·2013은 파워 쿼리가 별도 추가 기능이었고, Microsoft는 2019년에 이 추가 기능의 지원을 중단했습니다. 이 경우 글의 파이썬 방법을 쓰거나, Windows용 엑셀 2016 이상 또는 Microsoft 365를 씁니다.

확장자가 .xls인 옛날 파일도 합쳐지나요?

글의 파이썬 스크립트가 쓰는 openpyxl은 xlsx 계열 파일만 읽습니다. .xls 파일은 엑셀에서 열어 .xlsx로 저장한 뒤 합칩니다.

파일마다 열 이름이 조금씩 다르면 어떻게 하나요?

파이썬 스크립트 위쪽의 '같은 열로 볼 이름'에 다른 이름을 추가합니다. 예를 들어 '판매수량'을 '수량'과 같은 열로 묶을 수 있습니다. 추가하지 않으면 그 파일은 건너뛰고 '확인 필요'로 알려 줍니다.

근거와 출처

직접 해 본 근거

  • 직접 캡처 엑셀 2010과 명령 프롬프트에서 실제로 실행한 화면을 캡처했습니다(합치기 전 파일, 실행 결과, 합친 결과의 처음과 끝). 시연 영상은 이 캡처로 다시 구성했습니다.
  • 직접 측정 합성 엑셀 파일 100개(데이터 3,836행)를 최종 파이썬 스크립트로 3회 합쳐 소요 시간을 쟀습니다. 회당 0.90~0.91초였습니다.
  • 결과 파일 글에 쓴 합치기 스크립트(merge.py)를 내려받을 수 있습니다.
  • 실행 코드 첫 버전이 합계 행 1개를 놓친 실행 기록과, 고친 뒤 파일별 행 수를 원본과 대조해 모두 맞은 검산 기록을 남겼습니다.

참고한 출처