shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel】WEBSERVICE関数でXML形式のデータを取得してデータ抽出

Excelには、API等のWEBサービスからデータを取得する「WEBSERVICE関数」、取得したXML形式のデータから必要な値を抽出する「FILTERXML 関数」があります。

国税庁の法人番号公表サイトにある「法人番号システム Web-API」を事例に、Excelで指定した法人名の法人番号や市区町村を取得する方法です。
なお、Web 用 Excel および Excel for Macには対応しておらず、2013 Excel以降でないと今回の方法では取得できない見込です。以下、使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2311)です。

内容:

アウトプットイメージ

入力した企業名について、「法人番号システム Web-API」から法人名、法人番号、市区町村を数式で抽出しています。

WEBSERVICE関数、FILTERXML関数等を活用してデータ抽出

Excelで「法人番号システム Web-API」からデータ抽出例

事例のデータ抽出をする前提

他のXML形式のデータが取得できるサービスであれば事例と同様の考え方でデータ抽出できます。

なお、事例の「法人番号システム Web-API」は、誰でも利用できますが、「Web-API機能利用規約」の同意と、国税庁適格請求書発行事業者公表サイトから、アプリケーションIDの発行手続が必要です。詳細は以下でご確認ください。

www.houjin-bangou.nta.go.jp

事例のデータ抽出手順と説明

使用する関数

使用する関数は以下の3つと、文字列の結合です。

  1. 日本語の文字をURLで使用できる文字に変換
    (前述アウトプットイメージでは、B3で使用)
    詳細: ENCODEURL 関数 - Microsoft サポート
  2. 生成したURLでWEBサービスからデータ取得
    (前述アウトプットイメージでは、B5で使用)
    詳細: WEBSERVICE 関数 - Microsoft サポート
  3. 指定された xpath を使用して XML コンテンツから特定のデータを取得
    (前述アウトプットイメージでは、B6、B7、B8で使用)
    詳細: FILTERXML 関数 - Microsoft サポート

文字列の結合は、前述アウトプットイメージのB4で使用しています。このAPI用URLを作成するときに、「法人番号システム Web-API」ではアプリケーションIDが必要となるため、事前に発行手続きが必要です。

抽出手順

  1. 利用するWEBサービスの仕様にもとづいて、URLを作成します。
    アウトプットイメージで、B2、B3、B4に該当する箇所です。事例の「法人番号システム Web-API」の場合は、以下がURLの仕様に該当する部分です。
    国税庁法人番号公表サイトにある「Web-API(Ver.4.0)のリクエストの設定方法及び提供データの内容について」のP16(4. 法人名を指定して情報を取得する機能について  4.3. リクエスト例と応答結果のサンプル ⑶ ケース 12 ファイル形式を XML と指定する場合)

  2. WEBSERVICE 関数でXML形式のデータを取得します。
    アウトプットイメージで、B5に該当する箇所です。

  3. 取得したXML形式のデータから、 FILTERXML関数を使用して、データ抽出します。

事例の注意点

前述のアウトプットイメージの使用方法の場合、一致する法人名が複数ある場合はB6等で「#スピル!」のエラーが発生します

FILTERXML関数に合致するデータが複数存在する場合は、縦方向にデータ抽出され、すでにあるセルと競合するためです。
・行列を反転して、縦方向に空欄を設ける

・xpathの指定方法を変更し、一致するデータを一つに絞る

などの修正が必要です。

 

また、WEBSERVICE関数は次の制限がありますので、取得できるデータの内容によってはエラーが発生します。

  • 引数がデータを返できない場合、WEBSERVICE はデータを#VALUE。 エラーが表示されます。
  • 引数の結果に無効な文字列、または許容されるセル制限である 32767 文字を超える文字列が含まれる場合、WEBSERVICE は値を返#VALUE。 エラーが表示されます。
  • URL が GET 要求に対して許可されている 2048 文字を超える文字列である場合、WEBSERVICE は次の#VALUE! エラーが表示されます。
  • サポートされていないプロトコル (ftp:// や file://など)の場合、WEBSERVICE は #VALUE! が返されます。

    出典: WEBSERVICE 関数 - Microsoft サポート

以上、ExcelのWEBSERVICE関数でXML形式のデータを取得してデータ抽出する事例でした。