スプレッドシートで法人番号を取得する方法|GASで国税庁API

Googleスプレッドシートで法人番号から会社名を取得するなら、Google Apps Script(GAS)で国税庁の法人番号APIを呼び、結果をシートに書き込む方法が手軽です。

この記事では、A列の法人番号からB列に会社名、C列に所在地を入れるスクリプトを紹介します。Excelで同じことをしたい方はExcelで法人番号APIを使う方法を、APIの選択肢を比べたい方は法人番号APIの比較を見てください。

準備:アプリケーションIDをスクリプトプロパティに入れる

国税庁のアプリケーションIDは、コードに直接書かず、スクリプトプロパティに保存します。

  1. スプレッドシートの「拡張機能」→「Apps Script」を開く
  2. 左の「プロジェクトの設定」→「スクリプト プロパティ」を開く
  3. プロパティ NTA_APP_ID、値に発行されたアプリケーションIDを入れて保存する

サンプルコード

function fillCorporateInfo() {
  const appId = PropertiesService.getScriptProperties().getProperty("NTA_APP_ID");
  const sheet = SpreadsheetApp.getActiveSheet();
  const lastRow = sheet.getLastRow();
  if (lastRow < 2) return;

  const numbers = sheet
    .getRange(2, 1, lastRow - 1, 1)
    .getDisplayValues()
    .map((row) => row[0].trim());

  for (let i = 0; i < numbers.length; i += 10) {
    const chunk = numbers.slice(i, i + 10).filter((n) => /^\d{13}$/.test(n));
    if (chunk.length === 0) continue;

    const url =
      "https://api.houjin-bangou.nta.go.jp/4/num?id=" + appId +
      "&number=" + chunk.join(",") + "&type=12";
    const xml = UrlFetchApp.fetch(url).getContentText("UTF-8");
    const root = XmlService.parse(xml).getRootElement();

    const found = {};
    root.getChildren("corporation").forEach((corp) => {
      found[corp.getChildText("corporateNumber")] = [
        corp.getChildText("name"),
        corp.getChildText("prefectureName") +
          corp.getChildText("cityName") +
          corp.getChildText("streetNumber"),
      ];
    });

    const values = numbers
      .slice(i, i + 10)
      .map((n) => found[n] || ["見つかりません", ""]);
    sheet.getRange(i + 2, 2, values.length, 2).setValues(values);
    Utilities.sleep(1000);
  }
}
  • getDisplayValues() で、表示どおりの文字列として法人番号を読みます。セルの書式は「書式なしテキスト」にしておくと、先頭の0が消えません。
  • 1回のリクエストで10件まとめて取得し、1秒待ってから次を呼びます。利用規約で短時間の大量アクセスが禁止されているためです。

実行のしかた

  1. A1に「法人番号」、B1に「会社名」、C1に「所在地」と見出しを入れる
  2. A2から下に法人番号を入れる
  3. Apps Scriptのエディタで fillCorporateInfo を選んで実行する
  4. 初回は、外部へのアクセスとシートの編集の権限を許可する

よくあるつまずき

法人番号が指数表記になる

数値として入力すると 1.18E+12 のように表示され、正しい番号を送れません。列の書式を「書式なしテキスト」にしてから入力してください。

実行時間の上限で止まる

GASの1回の実行時間には上限があります。数千件を一度に処理すると途中で止まるので、数百件ずつに分けるか、処理した行を記録して続きから再開するようにします。

会社名から法人番号を探したい

このスクリプトは法人番号から会社名を引く方向です。会社名から法人番号を探すには、法人名での検索(/4/name)を使います。表記ゆれがあると見つからないことがあるので、会社名から法人番号を調べる方法を参考にしてください。

インボイスの登録状況も入れたい場合

法人番号APIでは、インボイスの登録状況は取れません。インボイスWeb-APIを別に呼ぶ必要があり、そのためのアプリケーションIDには審査があります。法人番号とインボイスを1回で取れるAPIを使う場合は、UrlFetchApp.fetch のヘッダーにAPIキーを入れて呼びます。

const res = UrlFetchApp.fetch(
  "https://api.bango-api.jp/v1/companies/" + number,
  { headers: { "x-api-key": PropertiesService.getScriptProperties().getProperty("BANGO_API_KEY") } },
);
const data = JSON.parse(res.getContentText()).data;

まとめ

Googleスプレッドシートで法人番号を取得するなら、GASで国税庁APIを10件ずつ呼び、XmlServiceで解析してシートに書き込みます。アプリケーションIDはスクリプトプロパティに置き、編集権限を渡す相手に気をつけてください。

ほかのAPIも含めて選びたい方は法人番号APIの比較を見てください。

この記事を書いた人

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

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