ExcelVBA에서 HTTP 액세스하여 XML 데이터 가져오기

5780 단어 ExcelVBA

소개



2017년 5월부터 신세를 지고 있는, 나의 새로운 직장은, Excel을 좋아하는 집단이었습니다. 몇 년 만에 저도 ExcelVBA를 사용하게되었습니다. 복습한 것을 조금씩 Qiita에 투고하고 싶습니다.

이번에는 ExcelVBA에서 웹 API에 액세스하여 XML 데이터를 가져 와서 시트에 반영하고 싶습니다. 위키피디아의 「최근에 갱신된 기사의 타이틀」을 취득하고 있습니다.



실제 XML 코드를보고 싶다면 => 여기를 클릭

준비 작업



내 PC 환경은 다음과 같습니다.
  • Windows 10 Pro 버전 1809
  • Excel 2016 버전 1904

  • 건너뛰기(이번에는 할애)



    다음은, 독자는 할 수 있는 or 이해하고 있는 것으로 합니다.
  • 리본 (Excel 메뉴)에 "개발"이 있습니다
  • Excel 파일을 Excel 매크로 사용 설명서 (* .xlsm)에 미리 저장합니다.
  • 시트에 버튼을 놓고 매크로 할당

  • 반드시 할 일



    개발 리본에서 Visual Basic 아이콘을 클릭하여 Visual Basic for Applications를 시작합니다. 도구 메뉴에서 도구 참조 설정을 클릭합니다.



    등장한 참조 설정 대화상자에서 Microsoft XML, v6.0 를 찾아 체크합니다.



    실제 VBA 코드


    Option Explicit
    
    Sub Main()
    
    '変数の宣言
    Dim http As XMLHTTP60
    Dim doc As DOMDocument60
    Dim node As IXMLDOMNode
    Dim url As String
    Dim i As Integer
    
    'HTTPアクセスを設定して発射
    Set http = New XMLHTTP60
    url = "https://ja.wikipedia.org/w/api.php?action=query&list=recentchanges&rcnamespace=0&format=xml"
    http.Open "GET", url, False
    http.send
    
    'HTTPアクセスに失敗があったら中止
    If http.statusText <> "OK" Then
        MsgBox "サーバーへの接続に失敗しました", vbCritical
        Exit Sub
    End If
    
    'XMLデータを取り込む
    Set doc = New DOMDocument60
    doc.LoadXML (http.responseText)
    
    'XPathを使ってノード(要素)を取り込む
    i = 1
    For Each node In doc.SelectNodes("//rc")
        '各ノードのtitle属性を取得して、シートに貼り付ける
        ActiveSheet.Range("A" & i + 2).Value = i & ": " & node.Attributes.getNamedItem("title").Text
        i = i + 1
    Next
    
    '後片付け
    Set http = Nothing
    Set doc = Nothing
    Set node = Nothing
    
    End Sub
    

    마지막으로



    불행히도 ExcelVBA에서 데이터 형식은 기본적으로 XML입니다. JSON은 투영처럼 보입니다. 코드가 복잡해지는 것을 피하기 위해서, 서버측도, XML로 만들어 가려고 생각합니다.

    좋은 웹페이지 즐겨찾기