shikumika’s diary

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

【Excel】FILTERXML関数でXPathを指定してXMLからデータ抽出

ExcelのFILTERXML関数でXPathを指定してXMLからデータ抽出する事例です。

題材は、【Excel】WEBSERVICE関数でXML形式のデータを取得してデータ抽出と同様に、国税庁の法人番号公表サイトにある「法人番号システム Web-API」で取得できるXML形式のデータです。

また、使用のExcelは「Microsoft® Excel® for Microsoft 365 MSO」(バージョン2311)です。

アウトプットイメージ(数式と結果)

国税庁法人番号公表サイトにある「Web-API(Ver.4.0)のリクエストの設定方法及び提供データの内容について」に掲載されているXMLサンプルからFILTERXML関数で抽出で抽出しています。

複数の要素が一致したとき角括弧を使用して順番の要素を取得

FILTERXML関数でXPathの指定事例

補足説明

  • Xpathには、色々な表記ルールがありますが、上記事例の抽出における必要な最低限として、抽出したいタグのスタートを”//(タグ名)”と指定します。
  • 上記事例では、<corporateNumber>のタグが複数あります(サンプルで中略しているので、XML上では2回)。
    そのため、FILTERXML関数のスピル機能でC8とC9に抽出結果が表示されています。
  • <corporateNumber>の二回目出現を抽出する場合は、一つ上の階層の<corporation>の2回目という指定で、次のようにします。
    =FILTERXML($B$2,"//corporation[2]/corporateNumber")
    角括弧で順番を指定し、一つ下の階層を"/"で区切ります。

上記のXMLの内容は、次のとおりです。

<?xml version="1.0" encoding="UTF-8"?> 
<corporations> 
  <lastUpdateDate>2017-05-10</lastUpdateDate> 
  <count>10</count> 
  <divideNumber>1</divideNumber> 
  <divideSize>1</divideSize> 
  <corporation> 
     <sequenceNumber>1</sequenceNumber> 
     <corporateNumber>2040001999902</corporateNumber> 
   (中略) 
     <enAddressOutside/> 
    <furigana/> 
    <hihyoji>0</hihyoji> 
  </corporation> 
 (中略)
  <corporation> 
    <sequenceNumber>10</sequenceNumber> 
    <corporateNumber>3040001999901</corporateNumber> 
   (中略) 
    <enAddressOutside/> 
    <furigana/> 
    <hihyoji>0</hihyoji> 
  </corporation> 
</corporations>

 

以上、「法人番号システム Web-API」で取得できるXML形式のデータをFILTERXML関数で抽出する事例でした。