프로그램/완료

[엑셀vba] 재무제표 받아오기

도 박사 2021. 1. 12. 21:00
반응형

작년 6월부터 소액(20만원)으로 주식투자를 시작하여 11월에 본격적으로 투자금을 넣기 시작했다.

투자 방식은 장기적으로 꾸준히 특정 종목을 매수하는 것이다. 

 

특정 종목 3가지를 선택하고 소량으로 매수하고 후에 종목 공부를 하기 시작했다.

주식의 기본이 재무제표 보는 법이라 하는데 그걸 공부하기 위해 VBA로 재무제표 불러오는 코드를 작성했다.(?)

그냥 인터넷으로 봐도 되는데 굳이...?라고 생각할 수도 있지만, 그냥 한번 만들어봤다.

 

그리고 어떻게 동작하는지 정리해봤다.


1. 동작 순서

  • 엑셀 시트에서 '종목 찾기' 버튼을 눌러 폼을 띄운다.
  • 폼에서는 종목을 검색할 수 있으며 목록에서 선택된 종목의 재무제표를 엑셀 시트에 불러온다.(웹 크롤링, 5초 정도 소요됨 )
  •  웹 크롤링이 완료되면 자동으로 Access DB에 테이블, 필드, 레코드를 생성한다. (테이블명 = 종목이름, 필드= 재무제표 항목들, 레코드 = 재무제표의 숫자 데이터들)
  • 최초 한 번 웹 크롤링 된 종목은 다음에 다시 불러올 때 DB에서 먼저 찾아서 결과를 보여준다. (DB에 저장되지 않은 종목은 웹 크롤링 진행)

간단하게 나타내면 위와 같이 진행된다. 하지만 중간에 이것저것 잡다한 것들을 많이 넣어놔서 생각보다 긴 코드가 되었다.

 

 


2. 프로그램 구성

재무제표 크롤링하는 VBA는 2개의 모듈과 2개의 폼으로 이뤄져있다.

 

* 폼

 - userform1: 종목 찾고 재무제표 크롤링 하는 폼(종목 찾기 폼)

 - userfom2: db에 저장된 종목 불러오는 폼

 

* 모듈

 - 메인 모듈: 6개 프로시저, 1개 함수로 구성

  • 프로시저1: 폼에서 선택된 종목을 웹 크롤링 하는 프로시저
  • 프로시저2: 인터넷 로딩 대기
  • 프로시저3: 종목 찾기 폼에서 검색어를 입력했을 때 검색어가 포함된 종목들을 나열해줌
  • 프로시저4: DB에 연결하고 쿼리 전송하는 프로시저. 테이블 생성, 데이터 삽입, 조회를 함
  • 프로시저5: 셀 꾸미는 부분
  • 프로시저6: DB에서 불러온 데이터의 표시형식 설정
  • 함수1: '(E)' 문자열이 있는지 확인. (E)표시는 실제 재무제표가 아닌 예측값으로, 나중에 변동될 수 있는 값이라는 의미로 표시해둠. 

 - 폼 관련 모듈: 폼 열때 사용할 프로시저 2개

  • 종목 찾기 폼

검색어와 연관된 종목들이 나열됨

  • DB에서 불러오는 폼

DB에 저장된 재무제표 가져오기

DB에 저장된 데이터를 가져오는 것이 웹 크롤링보다 확실히 빠르다. 

 


3. 정리

추가하거나 수정이 필요한 부분 정리

  • DB에서 불러올 때 소수인 숫자들만 소숫자리까지 나타내기.(해결)
  • DB에서 불러올 때 마이너스 숫자는 빨간색 + 괄호 표시로 나타내기(해결)
  • 예측값으로 저장된 재무제표는 실제 데이터가 나오면 업데이트 할 수 있도록 기능 구현
  • DB에 저장된 종목 삭제 
  • 그 외 코드 최적화
  •  

4. 파일

Dobaksa_Special.zip
0.35MB

소개: 재무제표를 스크래핑하는 프로그램.

 

사용법:

1. 압축을 풀고 '재무제표_크롤링.xlsm'과 'Corp_num.accdb'을(를) 같은 폴더에 놔둔다.

2. 엑셀파일을 실행하고 종목찾기로 종목 검색.

3. 최초 검색되는 종목은 네이버 금융 페이지에서 웹 크롤링되고, 결과는 엑셀 시트에 출력함과 동시에 'Corp_num.accdb' 파일에 저장됨

 

저장된 db목록 삭제방법.

1. 숨겨진 시트에서 db_list 숨기기취소하여 A~C열 내용 삭제. (첫 행은 남기고)

2. db_list는 다시 숨기기

3. Corp_num.accdb 파일 열고 지울 종목삭제. (종목명으로 테이블 이름지음)

 

※ Corp_num.accdb의 list 테이블은 종목코드를 저장해 놓은 테이블이라 중요하다.

 

액세스를 연계해서 처음 만들어보는데다 전문 프로그래머가 아니다 보니 미숙한 점이 상당히 많다. (코드도 복잡함)

하지만 이걸 바탕으로 좀 더 나은 프로그램으로 만들고 있는 중이다.


 

반응형