Googleスプレッドシートで金融機関・支店コードを取得してみる|ginconnect実践ガイド

Googleスプレッドシートで金融機関・支店コードを取得してみる|ginconnect実践ガイド

金融機関名や支店名は分かっているのに、コードは別で調べなければいけない状況があります。数件なら手作業でも対応できますが、一覧を作成する場合には転記の手間がかかります。

そこで今回は、金融機関・支店情報API「ginconnect」を使って、Googleスプレッドシートからコードを取得します。

使うのはGoogleスプレッドシートと、コード取得用の2つの数式です。金融機関名と支店名を入力すると、それぞれのコードが取得できる表を作成していきます。

完成したシートは以下のとおりです。

金融機関コードと支店コードを取得したスプレッドシート
金融機関コードと支店コードを取得したスプレッドシート

今回は「みずほ」「三菱UFJ」「三井住友」の3件で検証します。コードを取得するだけでなく、複数行への展開や、取得した結果の確認まで行います。

まずはAPIキーを用意する

ginconnectのAPIを利用するには、アカウントとAPIキー、そして有効な無料トライアルまたは契約が必要です。

現在は30日間の無料トライアルが用意されており、クレジットカードの登録も不要です。

アカウントの登録方法は公式スタートガイドで紹介されているため、ここではAPIキーの準備から進めます。
ginconnectにログインしたら、ダッシュボードから「新しいAPIキーを作成」を選びます。

ginconnectのAPIキー作成画面
ginconnectのAPIキー作成画面

キー名を入力し、必要に応じて有効期限を設定します。

「許可するオリジン」は、ブラウザのJavaScriptからAPIを呼び出す場合などに使用する設定です。今回はGoogleスプレッドシートのIMPORTDATA関数を使うため、未設定のままで問題ありません。

APIキーを発行したら、安全な場所に控えておきます。

APIキーはどこに保存する?

今回は、発行したAPIキーをスプレッドシートのZ1セルに保存し、数式から参照します。

Z1を選んだのは、今回使うA〜D列から離しておきたかったからです。キーを数式に直接書かず、$Z$1を参照するようにしておけば、キーを変更するときも1か所を書き換えるだけで済みます。

Z列は非表示にしておくと作業中の邪魔になりません。ただし、列を非表示にしても、シートの閲覧権限を持つユーザーはセルや数式バーから値を参照できます。また、IMPORTDATA関数を使うとリクエストURLにAPIキーが平文のパラメータとして含まれるため、通信経路やシートの共有者に対してキーが露出するリスクがあります。そのため、この方法は外部に共有しない、完全な個人利用に限定されたスプレッドシートでのみ運用してください。

APIキーの取り扱いに注意 今回の方法は、自分だけで使うなど、アクセスを限定したスプレッドシートを想定しています。APIキーを含むシートは公開・共有しないでください。 また、APIキーがリクエストURLやエラー詳細に含まれる場合があります。スクリーンショットなどを共有する際にも注意が必要です。

スプレッドシートに入力欄を作る

準備ができたら、新しいGoogleスプレッドシートを開きます。

まずは1行目に、次の4つの見出しを入力します。

  • A1:金融機関名
  • B1:金融機関コード
  • C1:支店名
  • D1:支店コード
4つの見出しを入力したスプレッドシート
4つの見出しを入力したスプレッドシート

A列とC列に金融機関名・支店名を入力し、B列とD列にはginconnectから取得したコードを表示する形です。

先ほど控えたAPIキーも、忘れずにZ1セルへ入力しておきます。

それでは、まず1行分の数式を入力します。

金融機関名からコードを取得してみる

最初に、A2セルへ「みずほ」と入力します。

続いて、B2セルに次の数式を貼り付けます。

=TEXT(IMPORTDATA("https://api.ginconnect.jp/v1/sheet/bank?token="&$Z$1&"&name="&ENCODEURL(A2)),"0000")

少し長い数式ですが、仕組みはそれほど複雑ではありません。

IMPORTDATAは、URLからCSVやTSV形式のデータを取り込むGoogleスプレッドシートの関数です。ginconnectにはスプレッドシート向けに単一の値を返すAPIが用意されており、今回はこの関数を使って金融機関コードを取得しています。

数式の中では、ENCODEURL(A2)で「みずほ」をURLに使用できる形式へ変換し、$Z$1からAPIキーを参照しています。

文字列整形による先頭のゼロ落ち防止

ここで対処が必要になるのが、金融機関コードの先頭にある0の扱いです。

みずほの金融機関コードは0001ですが、スプレッドシートが数値として解釈すると、先頭の0が消えて1になってしまうことがあります。

実際にTEXT関数を外して試したところ、今回の検証でも1になりました。

今回は取得したコードを後ほど支店検索にも使うため、4桁のまま保持する必要があります。そこで、TEXT(...,"0000")を使って文字列の形式を揃えています。

数式を入力すると、B2セルに0001が表示されます。

みずほの金融機関コード0001を取得した結果
みずほの金融機関コード0001を取得した結果

これで金融機関名からコードを取得できました。

なお、初めてIMPORTDATA関数で外部データを取得する場合、Googleスプレッドシートからアクセス許可を求められることがあります。

警告が表示されたら、数式の接続先がapi.ginconnect.jpであることを確認し、内容に問題がなければ「アクセスを許可」を選択してください。

取得したコードを使って、支店コードも調べる

金融機関コードが取得できたので、次は支店コードも調べます。

支店名だけでは、どの金融機関の支店なのか特定できません。そのため、支店を検索するときには金融機関コードも指定します。

今回はB2セルの0001を使って、みずほの中から「東京営業部」を検索します。

C2セルに「東京営業部」と入力し、D2セルに次の数式を貼り付けます。

=TEXT(IMPORTDATA("https://api.ginconnect.jp/v1/sheet/banks/"&B2&"/branch?token="&$Z$1&"&name="&ENCODEURL(C2)),"000")

金融機関コードを取得したときとの違いは、URLの途中にB2セルの値が入っていることです。

/banks/の後ろに金融機関コードを指定することで、検索対象の金融機関を絞っています。

また、支店コードは3桁なので、こちらはTEXT(...,"000")を使用しています。

数式を入力すると、「東京営業部」の支店コード001が取得できます。

東京営業部の支店コード001を取得した結果
東京営業部の支店コード001を取得した結果

これで1行分が完成しました。

金融機関コードを取得しておけば、その値をそのまま支店検索にも使えます。

数式をコピーして3行分の一覧にしてみる

1行分が完成したので、ほかの金融機関でも検証します。

今回は、みずほに加えて次の2件を追加しました。

  • 3行目:A3に「三菱UFJ」、C3に「本店」
  • 4行目:A4に「三井住友」、C4に「神保町」

入力できたら、B2の数式をB3・B4へ、D2の数式をD3・D4へコピーします。

ここでポイントになるのが、APIキーの参照に使っている$Z$1です。

A2やC2はコピー先に合わせてA3、C3のように変わります。一方、$Z$1は絶対参照なので、どの行でも同じセルを参照します。

つまり、APIキーを毎回指定し直す必要はありません。

これで、冒頭に載せた3行分の一覧が完成しました。

金融機関名と支店名がすでに一覧になっているなら、コードを一つずつ調べて転記する手間を省けます。

ただし、今回のAPIは1回のリクエストで1つの値を取得する仕組みです。大量の行に一度に数式をコピーするとリクエスト数も増えるため、件数が多い場合は少しずつ展開してください。

逆引きによる入力名称との照合

ginconnectの名称検索は部分一致に対応しています。

実際に検証したところ、「みずほ」を「ずほ」、「東京営業部」を「京営業」と入力しても、それぞれのコードが取得できました。

短い名称でも検索できる反面、似た名称の金融機関や支店がある場合、入力者が意図したものとは異なる候補(例えば「みずほ」に対して「みずほ信託銀行」など)のコードが返される可能性があります。

そこで、取得したコードから逆に名称を調べ、最初の入力内容と一致するか確認します。なお、この手順は部分一致による意図しない候補の混入を検知するための照合であり、コード自体の客観的な正しさを外部ソースから独立して検証するものではありません。

コードから名称を取得する

まず、8行目に確認用の見出しを追加します。

  • A8:金融機関名(API)
  • B8:金融機関名一致
  • C8:支店名(API)
  • D8:支店名一致

金融機関コードから名称を取得するには、A9セルに次の数式を入力します。

=IMPORTDATA("https://api.ginconnect.jp/v1/sheet/bank?token="&$Z$1&"&code="&B2&"&field=name")

先ほどはnameで検索してコードを取得しましたが、今回はcodeにB2セルの値を指定し、field=nameで名称を取得しています。

支店名も同様に、C9セルへ次の数式を入力します。

=IMPORTDATA("https://api.ginconnect.jp/v1/sheet/banks/"&B2&"/branch?token="&$Z$1&"&code="&D2&"&field=name")

これで、取得したコードに対応する金融機関名と支店名を取得できます。

EXACT関数で一致するか確認する

次は、APIから取得した名称と、最初に入力した名称を比較します。

ここではEXACT関数を使います。2つの文字列が完全に一致すればTRUE、一致しなければFALSEを返す関数です。

B9セルには、金融機関名を比較する数式を入力します。

=EXACT(A9,A2)

D9セルには、支店名を比較する数式を入力します。

=EXACT(C9,C2)

名称を取得する数式と比較用の数式を、それぞれ11行目までコピーして3件分を確認します。

金融機関名と支店名を逆引きして照合した結果
金融機関名と支店名を逆引きして照合した結果

今回の3件では、金融機関名も支店名もすべてTRUEになりました。

なお、EXACT関数は文字の表記を厳密に比較するため、「銀行」という表記の有無や全角・半角の違いでもFALSEを返します。不一致となった場合は、APIから返された実際の名称を確認して表記の差異を切り分ける必要があります。

該当データが存在しない場合のエラー表示

存在しない支店名を入力した場合の挙動も確認します。

C4セルの「神保町」を「該当しない支店(検証用)」に変更します。

存在しない支店名で検索した際のエラー表示
存在しない支店名で検索した際のエラー表示

結果は#N/Aでした。

支店名を元の「神保町」に戻すと、再び支店コード001を取得できます。

ただし、`#N/A`の表示は「該当する支店が存在しない」という事実のみを意味しません。APIキーが無効な場合や、有効な契約がない場合にも同様のエラーが表示されるためです。

うまく取得できないときは、次の点を確認してください。

  • `#N/A`が表示される:金融機関名・支店名の表記、APIキーの有効期限、契約状態を確認する
  • `#REF!`が表示される:初回の外部アクセス許可が必要になっていないか、エラー詳細を確認する
  • コードの先頭の0が消える:TEXT関数で4桁または3桁に整形しているか確認する
  • コピーした行だけ取得できない:セルの参照先や$Z$1の指定を確認する

IMPORTDATA関数のキャッシュ挙動

IMPORTDATA関数の計算結果はGoogleスプレッドシート側でキャッシュされるため、入力値を変更しても即座にAPIへの再リクエストが行われるとは限りません。

Googleの公式ヘルプによると、シートを開いている間は1時間ごとに更新が確認されます。また、同じ数式を入力し直すことでも更新処理が起動します。一方、ブラウザの再読み込みだけでは更新されません。これは、クライアント側の再描画を行ってもGoogleのサーバー側で保持されている計算結果のキャッシュは破棄されないためです。

また、ginconnectのAPIにはレートリミットが設定されています。IMPORTDATA関数によるリクエストはユーザーの手元ではなくGoogleのサーバー群から送信されるため、同一の送信元IPアドレスから多数のリクエストが集中したと判定された場合、一時的な制限を受ける可能性があります。

大量のデータを扱う場合は、ginconnectの利用制限だけでなく、Googleスプレッドシート側のIMPORT関数の同時呼び出し上限にも注意を払う必要があります。

詳しくはGoogleスプレッドシートのIMPORT関数についても参考にしてください。

スプレッドシート連携運用の留意点

スプレッドシートの関数を使って金融機関コードや支店コードを補完する構成は、少数のデータを手軽に整える手段として有用です。

しかし、セルごとに外部APIを呼び出す仕組みである以上、行数に比例して通信回数が増大します。大量のデータを一度に処理するとレートリミットに達する懸念があるほか、一度取得すれば基本的に変わらないマスターデータに対して数式でリクエストを送り続けるのは運用の面からも合理的ではありません。

そのため、新規に入力した行のコードを取得した後は、セルの値をコピーして「値として貼り付け」を行い静的なデータに確定させる運用や、大量件数の一括処理には専用のスクリプトやバッチ処理を用いるなど、取り扱うデータ量に応じた使い分けが不可欠です。

より詳しい仕様やExcelでの利用方法については、以下の公式ドキュメントを参照してください。

sakomona

sakomona

電子工作好きなエンジニア