증권사 거래내역 파일, 엑셀에서 깨지지 않게 받는 법

주식 내역 엑셀 정리

작성자

카테고리:

파일은 받았는데 엑셀이 못 읽는다

증권사에서 거래내역을 내려받는 것까지는 어렵지 않다. 문제는 그 다음이다. 파일을 더블 클릭해서 열면 한글이 밥알처럼 깨져 있거나, 날짜 칸이 날짜로 안 잡혀서 정렬조차 안 된다. 종목코드 앞자리 0이 통째로 날아가 있는 경우도 흔하다.

같은 거래내역 CSV를 인코딩만 바꿔 엑셀로 연 실제 화면 두 장
같은 내용의 거래내역 CSV 를 인코딩만 바꿔 실제 엑셀에서 연 화면이다(엑셀이 직접 내보낸 렌더링). 위는 국내 증권사 기본인 CP949, 아래는 BOM 없는 UTF-8. 한글 깨짐은 UTF-8 쪽에서만 났고, 종목코드 앞자리 0 소실은 양쪽 모두에서 났다. 겸해서 확인된 것 하나 — 쉼표가 들어간 금액은 엑셀이 숫자로 제대로 읽었고 SUM 도 3,827,500 으로 정상이었다. 쉼표 자체가 원인인 경우는 생각보다 드물다.

이 글은 손익을 계산하는 방법을 다루지 않는다. 그 앞 단계, 그러니까 쓸 수 있는 데이터로 만드는 것까지만 다룬다. 계산은 데이터가 멀쩡해진 다음의 일이고, 순서를 바꾸면 수식이 왜 틀렸는지 영원히 못 찾는다.

1인 개발자로 여러 서비스를 굴리면서 배운 게 하나 있다면, 데이터 파이프라인에서 시간을 잡아먹는 건 계산 로직이 아니라 형식 맞추기라는 것이다. 투자 내역도 똑같다.

거래내역 파일은 어디서 받나

대부분의 증권사가 내보내기를 지원하는데, 메뉴가 은근 깊다. 버튼을 못 찾아서 포기하는 경우가 실제로 많다.

  • 토스증권: 엑셀 저장 버튼이 메인 화면에 없다. ‘더보기’에서 투자 메뉴로 들어가 주식 내역 탭을 누르고, ‘내역 보기’까지 들어가야 상단에 저장 아이콘이 보인다. 기간을 ‘전체’로 바꾸고 받는 걸 잊지 말 것.
  • 키움증권, 나무증권: PC용 HTS보다 웹 화면이 빠르다. HTS는 로그인 세션이 금방 끊기고 파일 형식 설정도 번거롭다. 웹의 조회/공시 메뉴에서 거래내역조회를 고르고 파일 형식을 엑셀이나 CSV로 맞추면 된다.
  • 메리츠증권, 한국투자증권: 종합계좌 내역 조회 페이지에 다운로드 옵션이 있다. 확장자가 CSV나 XLSX인지 확인하고 받는다.

여기서 미리 확인할 게 조회 기간이다. 증권사마다 한 번에 뽑을 수 있는 기간에 제한이 걸려 있어서, 몇 년치를 한 번에 받으려다 앞부분이 잘린 채로 저장되는 일이 생긴다. 받은 뒤에 행 수를 세어보고 첫 거래일이 맞는지 눈으로 확인하는 습관이 필요하다.

한글이 밥알처럼 깨질 때

가장 먼저 마주치는 벽이다. 원인은 인코딩이다. 국내 증권사 파일은 EUC-KR로 저장되는 경우가 많은데, 엑셀은 CSV를 더블 클릭하면 인코딩을 스스로 추측한다. 그 추측이 틀리면 글자가 깨진다.

그래서 더블 클릭으로 열면 안 된다. 빈 엑셀 시트를 먼저 띄우고 불러와야 한다.

인코딩을 지정해서 여는 순서

  1. 빈 통합 문서를 연다
  2. 데이터 탭에서 데이터 가져오기, 텍스트/CSV를 고른다
  3. 미리보기 창 위쪽 원본 파일 항목을 EUC-KR로 바꾼다. 그래도 깨지면 UTF-8로 바꿔본다
  4. 미리보기에서 한글이 제대로 보이면 그때 불러온다

둘 중 뭐가 맞는지는 파일을 열어보기 전엔 모른다. 그냥 둘 다 눌러보고 미리보기가 멀쩡한 쪽을 고르면 된다.

그래도 안 되면 구글 시트

엑셀 버전에 따라 가져오기 마법사가 인코딩 선택을 안 보여주기도 한다. 그럴 땐 구글 시트에 파일을 올려서 여는 쪽이 빠르다. 시트는 인코딩을 알아서 잡는 편이고, 정리한 뒤 다시 엑셀로 내려받으면 된다. 돌아가는 길처럼 보여도 마법사와 씨름하는 시간보다 짧다.

날짜가 날짜로 안 잡힐 때

증권사마다 날짜 표기가 다르다. 20260721처럼 붙여 쓰기도 하고 2026.07.21처럼 점을 찍기도 한다. 엑셀은 이걸 글자로 읽어버려서 정렬도 안 되고 기간 필터도 안 걸린다.

함수부터 꺼내들 필요는 없다. 데이터 탭의 텍스트 나누기가 제일 빠르다. 구분 기호로 점을 지정해 연월일을 쪼갠 다음 DATE 함수로 다시 합치면 진짜 날짜가 된다. 숫자 여덟 자리로 붙어 있는 형태라면 텍스트 나누기 마법사 마지막 단계에서 열 데이터 서식을 날짜로 지정하는 것만으로 끝난다.

참고로 여기서 시간까지 같이 들어온 경우, 시간을 떼지 않으면 같은 날 거래가 서로 다른 날짜로 묶인다. 이건 정렬해보기 전까지 티가 안 나서 뒤늦게 발견하기 쉽다.

종목코드 앞자리 0이 사라질 때

삼성전자 코드는 005930인데 파일을 열면 5930으로 바뀌어 있다. 엑셀이 숫자로 인식하면서 앞의 0을 버린 것이다. 종목코드로 다른 표와 대조할 생각이라면 여기서 이미 어긋난다.

막는 방법은 가져올 때 그 열의 서식을 텍스트로 지정하는 것이다. 텍스트/CSV 가져오기 화면에서 열을 클릭하고 데이터 형식을 텍스트로 바꾸면 0이 살아남는다. 이미 날아간 뒤에 되살리려면 TEXT(A2,"000000") 같은 함수를 써야 하는데, 애초에 텍스트로 받는 쪽이 손이 덜 간다.

합계가 0으로 나올 때

SUM을 걸었는데 0이 뜨면 대부분 쉼표 때문이다. 1,250,000처럼 쉼표가 들어간 금액이라고 엑셀이 무조건 글자로 보는 것은 아니다. 지역 설정에 따라 쉼표는 정상적인 천 단위 구분자로 인식된다. 합계가 0이면 먼저 그 셀의 실제 데이터 형식과 지역 설정, 통화 기호, 눈에 안 보이는 공백을 확인해야 한다. 이미 글자로 들어온 값은 셀 서식만 숫자로 바꿔도 되돌아오지 않는다.

찾아 바꾸기로 쉼표를 지우는 게 가장 확실하다. 원화 기호나 뒤에 붙은 공백도 같은 이유로 계산을 막는다. 눈으로는 안 보이는 공백이 섞여 있는 경우가 있어서, 합계가 이상하면 TRIM을 한 번 돌려보는 것도 방법이다.

솔직히 이 단계에서 한 번쯤은 망친다. 쉼표를 지운다는 게 소수점까지 같이 날아가면 처음부터 다시 받아야 한다. 원본 파일은 따로 복사해두고 작업하는 편이 마음 편하다.

여기까지가 데이터 확보다

글자가 안 깨지고, 날짜가 날짜로 잡히고, 종목코드가 온전하고, 합계가 계산되면 준비가 끝난 것이다. 이 상태의 파일 하나만 있으면 그 다음은 수식 문제라서 훨씬 단순해진다.

표준 양식으로 정리하고 실현 손익과 평가 손익을 계산해 매일 갱신되는 형태로 만드는 과정은 주식 매매 내역 엑셀 정리하는 4단계 루틴에 따로 정리해 두었다. 이 글에서 만든 깨끗한 파일을 그대로 들고 가면 된다.

한 가지 덧붙이면, 이 작업을 매주 손으로 반복할 생각이라면 두세 번 만에 그만두게 된다. 받는 것부터 정제까지가 손에 익으면 그때 자동화를 붙이는 순서가 맞다. 처음부터 자동화를 짜려고 하면 형식이 왜 깨지는지 모른 채로 파이프라인을 만들게 되고, 그건 나중에 더 큰 일이 된다.

근거로 삼은 문서

고지 — 이 글은 투자 기록을 정리하는 도구 사용법이며 투자 권유나 자문이 아닙니다. 종목 판단은 제공하지 않으며 투자 결정과 그 결과의 책임은 투자자 본인에게 있습니다.


글쓴이 정보

초안은 AI 파이프라인이 쓰고, 검사를 통과한 글만 공개됩니다. 걸린 초안은 제가 직접 고칩니다. — 아일리고

자주 나오는 질문

증권사별 거래 내역 CSV 파일 다운로드 경로는 어디인가요?

토스증권은 ‘더보기 > 투자 > 주식 내역 > 내역 보기’ 상단의 엑셀 아이콘을 누르고 기간을 전체로 설정하세요. 키움증권이나 나무증권은 HTS보다 웹 화면의 [조회/공시] 메뉴에서 파일 형식을 엑셀이나 CSV로 지정해 받는 것이 훨씬 빠릅니다.

엑셀로 열었을 때 한글이 깨지는 문제는 어떻게 해결하나요?

파일을 더블 클릭해서 열면 안 되고, 빈 엑셀 시트에서 [데이터 가져오기] > [텍스트/CSV]를 통해 불러와야 합니다. 이때 원본 파일 인코딩이 UTF-8인지 EUC-KR인지만 확인하면 깨짐 없이 깔끔하게 불러와집니다.

증권사마다 다른 날짜 데이터 형식을 엑셀 날짜로 통일하는 방법은?

함수보다는 [데이터] 탭의 ‘텍스트 나누기’ 기능을 쓰는 게 에러율이 훨씬 낮습니다. 구분 기호로 연, 월, 일을 나눈 뒤 DATE 함수로 합치거나, 표 서식을 바꿔주는 방식으로 처리하면 됩니다.

종목코드 앞자리 0이 사라지는 건 어떻게 막나요?

엑셀이 005930을 숫자로 읽으면서 앞의 0을 버리기 때문입니다. 텍스트/CSV 가져오기 화면에서 해당 열을 클릭하고 데이터 형식을 텍스트로 지정하면 0이 그대로 남습니다. 이미 날아간 값은 TEXT 함수로 자릿수를 채워 되살릴 수 있습니다.

거래내역을 몇 년치 한 번에 받아도 되나요?

증권사마다 한 번에 조회할 수 있는 기간에 제한이 걸려 있어 앞부분이 잘린 채로 저장되는 경우가 있습니다. 받은 뒤 첫 거래일과 행 수를 확인하고, 기간을 나눠 여러 번 내려받아 합치는 편이 안전합니다.