본문 바로가기
VBA

[VBA] 코스피 200 가져오기(네이버 증권, Callbyname)

by 일등미노왕국 2022. 6. 27.

코스피 200을 가져오는 코드를 Jsonconver 없이 만들어 보았다.

단점은 엑셀 64비트를 사용하시는 분들은 초기에 설치파일을 본인 컴에 설치하신 후 사용하셔야 한다.

tsc64_1252.zip
0.08MB

설치는 압축을 풀고 EXE 파일을 눌러서 설치하면 된다.

더보기

 

Option Explicit
Sub get_kospi200()
    Ref.xmlhtml                                                                     '= xmlHttp 초기 바인딩 참조
    'Stop
    Dim strUrl As String: strUrl = "https://m.stock.naver.com/api/json/sise/enrollItemListJson.nhn?pageSize=202"  '= 네이버증권 코스피 200
    Dim xmlhttp As New ServerXMLHTTP60                                              '= xmlHttp 초기 바인딩
    Dim rngX As Range: Set rngX = [a4]                                              '= 코스피 내용을 출력할 영역
    Dim jsonStr$, rowCnt&, i&, j&
    Dim JsonObj As Object
    Dim JsonItem As Object
    Dim StockTal As Object, StockS As Object, Row As Object
    Dim keys: keys = Array("cd", "nm", "nv", "cv", "cr", "pcv", "mks", "aq", "aa")
                         '= 종목코드, 종목명, 현재가, 수익금, 등락률, 전일가, 시가총액, 거래량, 거래대금
    Dim kosKey                                                          '= 키들을 순환
    
    [a4:i203].ClearContents                                             '= 영역 초기화
    [b2] = Date
    
        xmlhttp.Open "GET", strUrl
        xmlhttp.Send
        xmlhttp.waitForResponse                                         '= 응답할때까지 대기
    
        jsonStr = xmlhttp.responseText                                  '= jsonstr = xmlHttp에서 응답된 문자열
        
        Set JsonObj = CreateObject("MSScriptControl.ScriptControl")     '= 자바스크립트를 VBA에서 이용하기 위한 선언
            JsonObj.Language = "JScript"                                '= 자바스크립트를 통해...
        
        Set JsonItem = JsonObj.Eval("(" & jsonStr & ")")                '= JsonItem으로 json 파서
   
        Set StockTal = CallByName(JsonItem, "result", VbGet)            '= 파서된 jsonitem에서 result를 또 파서
            rowCnt = CallByName(StockTal, "totCnt", VbGet)              '= rowCnt 는 주식수를 구함
        
        Set StockS = CallByName(StockTal, "itemList", VbGet)            '= 전체 주식에서 개별 주식으로 파서
    
    
    For i = 0 To rowCnt - 1                                             '= 전체 주식 수만큼 순환
        
        Set Row = CallByName(StockS, i, VbGet)                          '= 전체 주식 수들을 Row개체에 담아라
          j = 0
        
        For Each kosKey In keys                                         '= 개별 주식들의 키값을 순환
          rngX(i + 1, j + 1) = CallByName(Row, kosKey, VbGet)           '= 각 개별 키값을 출력
          j = j + 1
        Next kosKey
        
    Next i
  
End Sub

네트워크탭을 보시는게 아직 익숙하지 않은 분들은 윤자동 채널에서 공부를 하시고 보시기를 권장한다.

https://www.youtube.com/watch?v=eQK7SB_E8QI 

코스피200.xlsm
0.06MB

댓글