관련 지식인 질문:
https://kin.naver.com/qna/detail.nhn?d1id=1&dirId=102&docId=313829165&page=1#answer1
작동설명:
매크로 허용하고 파일을 열고
우측상단 새로고침 아이콘을 누르면
네이버 증권에 접속하여 (PC버전보다 모바일사이트에 접속)
Json 데이터를 수집하고
이를 VBAJSON을 이용하여
파싱하여
엑셀 시트에 입력해준다.
코드는 해당종목으로 하이퍼링크가 추가되고
전일비와 등락률에는 조건부 서식이 적용되고
또한 아이콘 서식이 적용된다.
PC버전 네이버 증권사이트에 접속하여
HTML데이터를 HTML Object Library와 GetElementsByTagId 를 이용하여 파싱할 수도 있겠으나
각 페이지별로 20여페이지를 로딩/파싱해야해서 불편하여
이번에는 웹사이트에서 실시간으로 데이터를 JSon 데이타 구조로 가져오기 때문에
한꺼번에 200여개의 자료를 가져올 수 있는 JSon데이타 파싱을 이용하였습니다.
VBA-JSON라이브러리를 이용하였습니다.
네이버 KOSPI 200자료의 JSON구조는 아래와 같습니다.
{"resultCode":"success","result":{"totCnt":202,"itemList":[{"cd":"005930","nm":"삼성전자",
"mt":"0","nv":42400,"cv":-50,"cr":-0.12,"rf":"5","pcv":42450,"mks":2721794,"aq":5178558,"aa":218420},
VBA-JSON을 사용하려면
Microsoft Scripting Engine 을 도구-참조에서 체크해주고
Dim Json As Object
Set Json = JsonConverter.ParseJson("JSON문자열")
위와 같이 하면 JSON데이터를 간단히 파싱해줍니다.
Json("resultCode") 는 "success"가 되고,
Json("result")("totoCnt") 값은 202가 되겠습니다.
JSon개체는 Object로 선언하거나 Dictionary 데이터로 선언하면 됩니다.
가장 핵심은 아래 부분입니다.
'Json 데이터 Parsing '////// Main Process
Set Json = JsonConverter.ParseJson(Result)
col = Array("cd", "nm", "mt", "nv", "cv", "cr", "rf", "pcv", "mks", "aq", "aa")
col2 = Array("코드", "종목", "mt", "현재가", "전일비", "등락률", "rf", "시가", "시가총액(억)", "거래량", "거래대금(백만)")
colCnt = UBound(col) + 1
total = Json("result")("itemList").Count ' = Json("result")("totCnt")
ReDim KOSPI(total, colCnt)
'배열에 입력 '/////// Main Process
i = 0
For Each J In Json("result")("itemList")
For c = 0 To UBound(col)
KOSPI(i, c) = J(col(c))
If c = 5 Then KOSPI(i, c) = KOSPI(i, c) & "%" '등략률은 백분율로 처리
Next c
i = i + 1
Next J
'시트에 출력
Set sht = ThisWorkbook.ActiveSheet
With sht
.Cells.Clear 'Contents
'//////// Main Process: 시트에 배열 내용 출력
.Range("A1", Cells(1, colCnt)) = col2 '제목 행
.Range("A2", Cells(total + 1, colCnt)) = KOSPI
'////////
이하 생략
전체 매크로는 아래와 같습니다.
특히 이번에는 아이콘 서식을 VBA로 적용하여
양수,0,음수에 따라 위아래 화살표, 빨간/파란 동그라미 아이콘이 달리 표시되게 해보았습니다.
매크로 파일 아래에 첨부합니다.
'XLS+VBA' 카테고리의 다른 글
폴더내 파일명 일괄 변경 (3) | 2019.04.03 |
---|---|
초등학교 5학년 수학 문제를 엑셀 VBA로 (0) | 2019.01.18 |
[파싱]블러드앤소울 웹사이트 캐릭터별 능력치, 장비내역 파싱해서 가져오기 (5) | 2019.01.13 |
VBA로 RSS XML 데이터 읽어오기 (5) | 2018.12.19 |
System Error &H8004005 (-2147467259) Active-X object insert failed (0) | 2018.11.11 |
네이버 파워링크와 블로그 검색결과 엑셀로 정리 (20) | 2018.08.15 |
네이버 사전 검색 및 발음 mp3 자동 다운로드 (87) | 2018.06.27 |
네이버 오늘의 단어 가져오기 (1) | 2018.04.09 |
최근댓글