Excelで法人番号APIを使う方法|WEBSERVICE関数とVBA

Excelから法人番号APIを使う方法は3つあります。

  1. WEBSERVICE関数とFILTERXML関数: 数式だけで、法人番号から会社名を取り出せる(Windows版Excel)
  2. VBA: 一覧の法人番号を10件ずつまとめて取得できる
  3. Power Query: 取得した結果を表として取り込める

どれも国税庁の法人番号システムWeb-APIとアプリケーションIDを使います。IDの取得がまだの方はアプリケーションIDの申請方法を見てください。Excelから手軽に使える民間のAPIも含めて比べたい方は、法人番号APIの比較をどうぞ。

方法1:WEBSERVICE関数とFILTERXML関数

A列に法人番号、B1セルにアプリケーションIDを入れておき、B列に次の数式を入れます。

=FILTERXML(WEBSERVICE("https://api.houjin-bangou.nta.go.jp/4/num?id="&$B$1&"&number="&A2&"&type=12"),"//corporation/name")
  • WEBSERVICE でAPIを呼び、XMLを文字列として受け取ります
  • FILTERXML で、XMLの中の name(商号)だけを取り出します

所在地がほしいときは、//corporation/prefectureName、//corporation/cityName、//corporation/streetNumber を取り出して連結します。

気をつけること

  • WEBSERVICE関数とFILTERXML関数は、Windows版のExcelでのみ使えます。Mac版やWeb版では使えません。
  • 数式は再計算のたびにAPIを呼びます。数百行に入れると大量のアクセスになるので、取得できたら値として貼り付けてください。
  • B1セルのアプリケーションIDはブックに保存されます。IDを入れたブックを社外の人と共有しないでください。 利用規約でIDの開示が禁止されています。

方法2:VBAで10件ずつまとめて取得する

API は1回に10件まで法人番号を指定できます。VBAで10件ずつまとめて呼ぶと、リクエストの回数を減らせます。

Sub FetchCorporateNames()
    Const APP_ID As String = "アプリケーションID"
    Dim ws As Worksheet: Set ws = ActiveSheet
    Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    Dim http As Object: Set http = CreateObject("MSXML2.XMLHTTP")
    Dim doc As Object: Set doc = CreateObject("MSXML2.DOMDocument.6.0")
    Dim r As Long, i As Long, numbers As String

    For r = 2 To lastRow Step 10
        numbers = ""
        For i = r To Application.Min(r + 9, lastRow)
            numbers = numbers & IIf(numbers = "", "", ",") & ws.Cells(i, "A").Value
        Next i

        http.Open "GET", "https://api.houjin-bangou.nta.go.jp/4/num?id=" & APP_ID & _
            "&number=" & numbers & "&type=12", False
        http.send
        doc.LoadXML http.responseText

        Dim node As Object
        For Each node In doc.SelectNodes("//corporation")
            For i = r To Application.Min(r + 9, lastRow)
                If CStr(ws.Cells(i, "A").Value) = node.SelectSingleNode("corporateNumber").Text Then
                    ws.Cells(i, "B").Value = node.SelectSingleNode("name").Text
                End If
            Next i
        Next node
        Application.Wait Now + TimeValue("0:00:01")
    Next r
End Sub
  • A列の法人番号は「文字列」の書式にしておきます。数値のままだと、先頭の0が消えたり指数表記になったりします。
  • 1秒ずつ待ってから次を呼んでいます。利用規約で短時間の大量アクセスが禁止されているためです。
  • Const APP_ID はマクロの中に残ります。マクロ入りのブックを共有するときは、IDを消してから渡してください。

方法3:Power Queryで表として取り込む

「データ」タブの「Webから」で、APIのURLを指定すると、XMLを表として取り込めます。

https://api.houjin-bangou.nta.go.jp/4/num?id=アプリケーションID&number=1180301018771,7000012050002&type=12

取り込んだあと、corporation の列を展開すると、法人番号、商号、所在地などが列になります。取得する番号が決まっていて、定期的に更新したい表に向いています。

Excelで使うときの限界

Excelは手軽ですが、件数が増えると限界があります。

  • 1回10件、数百件で数十回のアクセスになり、時間がかかる
  • インボイスの登録状況は取れない(インボイスWeb-APIは別のIDと審査が必要)
  • 会社名から法人番号を探す(名寄せ)のは、Excelだけでは難しい

会社名から法人番号を調べたい場合は会社名から法人番号を調べる方法を、まとめて調べたい場合は法人番号を一括で検索する方法を見てください。

まとめ

Excelで法人番号APIを使うなら、少しだけならWEBSERVICE関数とFILTERXML関数、一覧をまとめて処理するならVBA、定期的に更新する表ならPower Queryが向いています。どの方法でも、アプリケーションIDをブックに残して共有しないことと、短時間に大量に呼ばないことに気をつけてください。

Excelから使える民間のAPIも含めた比較は、法人番号APIの比較にまとめています。

この記事を書いた人

Bango API の開発者です。国税庁の法人番号Web-APIとインボイスWeb-APIを使ったシステムを実装してきた経験をもとに書いています。

本サービスは、国税庁法人番号システムWeb-API機能および国税庁適格請求書発行事業者公表システムのWeb-API機能を利用して取得した情報をもとに作成していますが、サービスの内容は国税庁によって保証されたものではありません。取得した情報は編集・加工して提供しています。