Excel活用

【Excel】法人番号検索ツールの作り方

酒井たかま
酒井たかま
法人番号検索ツールを作ってみたよ!

こんにちは。公認会計士の酒井(@SakaiTakama)です。

今回は、法人番号の検索ツールを作ってみたので、その話を書いてみたいと思います。

法人番号検索ツールの仕組み

このツールは、国税庁の法人番号システムWeb-API機能を使って法人番号データを取得するということをやってます。概要はこんな感じです。

参考:国税庁 法人番号システムWeb-API
https://www.houjin-bangou.nta.go.jp/webapi/

そして実際に作ったツールの画面がこちらです。

左側に検索項目欄、右に検索結果が出るようにしています。

すなわち検索項目を入力して検索ボタンを押すとパワークエリで検索条件をリクエストURLという形で送信し、それに対応するデータを取得して右に検索結果を表示する仕組みになっています。

ちなみに、Web-APIについて説明しておきます。

Web-API とは

ザックリいうと、「インターネットを介してシステム間でデータをやり取りする仕組み」とでも言いましょうか。

この場合では、エクセルを通じて国税庁の法人番号システムに「これこれこういうデータをください」と指令を出して、それに対して法人番号システムが該当するデータを返す、と言うことになります。

そして、この指示をどうやって出すのかというと、検索内容(つまり指示内容)をURLに入れ込む方法で指示を法人番号システムに送るわけです。

詳細はこちら(法人番号システムWeb-API)をご覧ください。

なお、法人番号システムのWeb-APIを使うには事前に「アプリケーションID」を取得しなければなりません。手続きの詳細は上のリンクから確認してください。

このアプリケーションIDの意味するところは、「法人番号システム」にアクセスするための入館証みたいなもの、と言えば分かりやすいかもしれません。

それでは、入手したアプリケーションIDを使ってリクエストURLを作っていきましょう。

リクエストURLの作成とデータの取得

まず、リクエストURLのルールを見ておきましょう。

  • 検索方法は法人番号で検索する方法と、法人名で検索する方法の2つがある。
  • 法人番号と法人名で検索する場合、URLの作り方が変わる。
  • 取得するデータ形式の指定は必ず必要で、それ以外の条件は任意。

これを踏まえたうえで、まず検索項目の入力欄を作っていきましょう。

検索項目の設定

検索ボックスはこんな感じです。

法人番号と法人名で入力欄が変わるように設定しています。

これは法人名で検索する場合は都道府県・市町村も指定して検索することができますが、法人番号で検索する場合は法人名・都道府県・市町村を指定できないため、検索方法を指定することで分けるようにしています。

そして、都道府県・市町村については別シートにこのようなデータを作っておき、都道府県に合わせて市町村も変わるドロップダウンリストにしています。

この、都道府県に合わせて市町村を変えて表示するドロップダウンリストの作り方はこちらの記事をどうぞ。

ちなみに、検索項目には他にもさまざま指定することができるのですが、今回はこの程度の検索項目で進めていきます。(他の項目は必要に迫られたら加えていく、かもしれません)

さて、検索項目ができたところで、リクエストURLの作成に移りましょう。

リクエストURLの作成

ここは法人番号か法人名かで作るリクエストURLが変わりますので、それぞれ見ていきましょう。

なお、リクエストURLは、別シート(「リクエストURL」シート)で作成しています。

※黒マスク部分がアプリケーションIDです。

上段は検索項目名、中段は検索値、下段はURLに入れる値です。

検索値が無い場合は下段が空欄となるようにIF関数で処理します。

そして7行目でそれらの項目を合体させてリクエストURLを完成させています。

法人番号で検索する場合

【リクエストURL】
https://api.houjin-bangou.nta.go.jp/4/num?id= ≪アプリケーションID≫ &number= ≪法人番号≫ &type=≪データ形式≫

法人番号で検索する場合、下線部が「 num?id 」 となることに注意が必要です。

≪アプリケーションID≫には国税庁から届いたIDを入れます。

≪法人番号≫ には、検索ボックスに入力した法人番号が入ります。

ちなみにコンマで区切れば10件まで検索できますが、このツールでは1件のみの対応にしています。(必要があれば複数件対応できるようにします。)

≪データ形式≫には、取得するデータの形式を指定します。

     01 = CSV(Shift-JIS)
     02 = CSV(Unicode)
     12 = XML(Unicode)

ここでは、パワークエリで加工しやすいXML形式を選択しています。

こんな感じで各項目を「&」でつないでリクエストURLを完成させ、リクエストURLのセルをテーブル化して作成は完了です。

法人名(+都道府県・市町村)で検索する場合

基本は法人番号を使って検索する方法と変わらないのですが、まずはリクエストURLの構成を見てみましょう。

【リクエストURL】
https://api.houjin-bangou.nta.go.jp/4/name?id= ≪アプリケーションID≫ &name= ≪法人名(URLエンコード)≫ &mode=≪検索方法≫ &address=≪団体コード≫&type=≪データ形式≫

法人名で検索する場合は下線部が「 name?id 」となります。(法人番号と違うことに注意してください)

≪アプリケーションID≫と≪データ形式≫の説明は省略して進めます。

≪法人名(URLエンコード)≫ には検索したい法人名ワードを入れるのですが、URLエンコードしないといけません。

「日清」とした場合、「%E6%97%A5%E6%B8%85」こんな形式になります。

これは数式で変換できるので安心してください。

「=ENCODEURL(法人番号検索!B5)」とすればOKです。法人名を入れたセルを参照してこの関数を使えばURLエンコードできます。なお、法人名で検索する場合の注意点は2点です。

  • 全角であること
  • 「株式会社」などの法人格は除く。
    例えば「○○株式会社」の場合「○○」

≪検索方法≫は、1(前方一致)か2(部分一致)を選べるのですが、ここでは2(部分一致)で固定しています。

≪団体コード≫は、検索項目に所在地も入れている場合に使います。

都道府県の場合は2桁の都道府県コード、市町村の場合は5桁の市町村コードを使います。

例えば、大阪府と指定した場合、もしくは大阪市まで指定した場合で見てみましょう。

大阪府であれば「27」、大阪市であれば「27100」といった具合です。

ちなみにこのコード表は総務省のHPから入手できます。(こちら)

あとはできあがったリクエストURLのセルをテーブル化して完成です。

リクエストURLの送信とデータの取得・変換

ここは以前書いた、データを相対パスで取得する方法でリクエストURLを法人番号システムに送信することができます。

すなわち、通常URLが固定になるところを、URLをあるテーブルデータと定義し、その定義したURLをパワークエリのデータソースに指定することでリクエストURLを自由自在に変えれるようにできます。

ちなみにこの方法はデータ取得する上でどんな場面でも応用が利くので覚えておいて損はないテクニックです。

データの取得はここから進めます。

パワークエリでデータを取得するのですが、今回は「WEBから」進めていきます。

で、試しに作ったリクエストURLを入れてデータが取得できるか確認しつつ、上述の相対パスの要領で詳細エディターでデータソースのURLをリクエストURLテーブルを参照するように書き換えていきます。

そして取得したデータを、検索結果として表示したい形式に編集し、読込先を指定すれば完成です。

その他にもパワークエリを活用する方法はこちらの書籍がおすすめです。

リクエストURLの送信とデータ取得をボタンひとつで実行する方法

それでは、最後にボタンひとつでクエリを更新する仕組みの実装です。

クエリの更新することでリクエストURLを送信しデータを取得します。

これをいちいちデータのタブを開いて更新ボタンを押すのでは面倒ですよね。

できれば検索ボックスの下にボタンを設置して、それを押せばクエリの更新をできるようにしたい。これはマクロの記録を使います。

ちなみにこの開発タブは初期設定では表示されないので、その場合は開発タブを表示する設定に変える必要があります。

なお、マクロ・VBAにまず慣れよう、そんな趣旨の本があるのでリンクを貼っておきますね。

created by Rinker
¥2,178 (2024/04/25 11:17:08時点 楽天市場調べ-詳細)

まとめ

たくさん書きましたが、法人番号検索ツールを作るためのポイントはそれほど多くありません。

  1. Web-APIのためのアプリケーションIDの取得
  2. リクエストURLの作成
  3. 取得したデータの加工

特に2と3を軸に作っていければ、それぞれで必要な処理がおのずと見えてくると思います。

最後までお読みいただきありがとうございました。

(長すぎるので、分割してリライトした方がいいかもしれませんね。。。)