최근 엑셀을 이용해서 주식 계좌 정리 파일을 만들 일이 생겨 간단히 기록하고자 합니다.
만든 프로젝트는 단순합니다.
- 구매한 개별 종목명과 종목코드 입력
- 매수한 수량과 매수단가 입력
- 버튼 클릭 시, 현재가격을 가져와 자동으로 평가금액 및 수익률 등 계산
대체로 엑셀의 기본기능을 사용하면 가볍게 구현할 수 있는 계좌 정리 방안입니다만, 주식의 현재 가격을 불러오는 것은 매크로를 이용해야 했습니다.
엑셀 매크로를 이용해서 각 개별 종목들의 현재가격을 웹에서 스크랩핑해오는 과정입니다.
엑셀 VBA 참조도구에 HTTP 관련내용 추가
다음 스크린샷과 같이 도구-참조에서 항목 추가해야합니다.
다음 코드를 입력합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Sub main() For row = 5 To 100 Set Value = Sheets("Sheet1").Cells(row, 4) If Not IsEmpty(Value) Then Call crawling(Value, row) End If Next row End Sub Sub crawling(num, row) Set explorer = CreateObject("InternetExplorer.Application") Url = "https://finance.naver.com/item/main.nhn?code=" & num With explorer .Visible = False .Navigate2 Url End With While explorer.readyState <> READYSTATE_COMPLETE Or explorer.Busy = True DoEvents Application.Wait (Now + TimeValue("0:00:01")) Wend Application.Wait (Now + TimeValue("0:00:01")) Dim document As HTMLElementCollection Set document = explorer.document For Each element In document.getElementsByClassName("no_today") Sheets("Sheet1").Cells(row, 7) = element.innerText Next element End Sub | cs |
main함수는 말그대로 엑셀에서 버튼 클릭 시 실행되는 함수입니다. 종목코드가 입력된 row, 즉 행을 따라 value를 읽어오고, 각 value를
Crawling
함수의 인자로 넣어줍니다.crawling에서는 거의 복붙 수준의 코드입니다. 네이버 finance의 종목을 보면, 주소에 종목 코드가 들어가 있는데, main에서 넘겨온 value를 주소에 포함시켜서 호출하는 형태입니다. 호출한 뒤, 현재가격에 해당하는 클래스를 읽어들여 각 종목 별 현재가 위치에 붙여넣습니다.
아래와 같이 구성되었습니다.
댓글