法人番号から名称、所在地を一括取得する方法
Apps Scriptを使って法人番号から名称(商号)、所在地(住所)を取得する方法を紹介します。
スクリプトの使い方はGoogle Apps Scriptでメール送信で確認してください。
スプレッドシート
シートに法人番号をセットしておきます。
スクリプトを実行すると名称と所在地がセットされます。
スクリプト
コードは次のとおりです。「get_name_address_by_hojinbango」を実行します。
なお件数が多すぎると結果が戻ってこないことがあるようです。
使用にあたっては自己責任でお願いします。
function get_name_address_by_hojinbango() {
//法人番号から名称と所在地を取得。
//シートの1列目に法人番号をセットしておく。
//2列目、3列目に名称と所在地を取得してセット。
//2列目が空の行だけ取得しに行く。
//一回の処理で最大100件。
//繰り返し実行すると全ての行の名称と所在地が埋まる。
var sheet, hojins, i, meisho, hojin, arrs, j;
//シートから法人番号を取得。
sheet = SpreadsheetApp.getActiveSheet();
hojins = [];
for (i = 2; i <= sheet.getLastRow(); i++) {
meisho = sheet.getRange(i, 2).getValue();
if (meisho === "") {
hojin = sheet.getRange(i, 1).getValue();
hojins.push(hojin);
}
}
//サイトから名称と所在地を取得。
arrs = fetch_info(hojins);
//シートに名称と所在地を貼り付け。
for (i = 2; i <= sheet.getLastRow(); i++) {
hojin = sheet.getRange(i, 1).getValue();
for (j = 0; j < arrs.length; j++) { if (arrs[j][0] == hojin) { sheet.getRange(i, 2).setValue(arrs[j][1]); sheet.getRange(i, 3).setValue(arrs[j][2]); break; } } } } function fetch_info(hojins) { var max_kensu, once_kensu, arrs, hs, temps; max_kensu = 100; once_kensu = 10; arrs = []; while (hojins.length > 0) {
hs = hojins.splice(0, once_kensu);
temps = fetch_info_ten(hs);
arrs = arrs.concat(temps);
}
return arrs;
}
function fetch_info_ten(hojins) {
//最大10件の法人番号を配列で与えると法人番号、名称、所在地を配列で返す。
var csv, url, result, html, ms, arrs, i, temps;
csv = hojins.join(",");
url = "http://www.houjin-bangou.nta.go.jp/matomete-kekka.html?houzinNoLst=";
result = UrlFetchApp.fetch(url + csv);
html = result.getContentText("UTF-8");
html = html.replace(/[\r\n]+/g, "");
ms = html.match(/<tr.*?>.*?法人番号[0-9]+件目.*?<\/tr>/g);
arrs = [];
for (i = 0; i < ms.length; i++) {
temps = ms[i].match(/<input.*?value="([0-9]+)".*? <td="">(.*?)<\/td>.*?
(.*?)<\/td>/);
temps[2] = temps[2].replace(/<span.*?>(.*?)<\/span>/, "$1");
temps[3] = temps[3].replace(/<span.*?>(.*?)<\/span>/, "$1");
arrs.push([temps[1], temps[2], temps[3]]);
}
return arrs;
}
//法人番号から名称と所在地を取得。
//シートの1列目に法人番号をセットしておく。
//2列目、3列目に名称と所在地を取得してセット。
//2列目が空の行だけ取得しに行く。
//一回の処理で最大100件。
//繰り返し実行すると全ての行の名称と所在地が埋まる。
var sheet, hojins, i, meisho, hojin, arrs, j;
//シートから法人番号を取得。
sheet = SpreadsheetApp.getActiveSheet();
hojins = [];
for (i = 2; i <= sheet.getLastRow(); i++) {
meisho = sheet.getRange(i, 2).getValue();
if (meisho === "") {
hojin = sheet.getRange(i, 1).getValue();
hojins.push(hojin);
}
}
//サイトから名称と所在地を取得。
arrs = fetch_info(hojins);
//シートに名称と所在地を貼り付け。
for (i = 2; i <= sheet.getLastRow(); i++) {
hojin = sheet.getRange(i, 1).getValue();
for (j = 0; j < arrs.length; j++) { if (arrs[j][0] == hojin) { sheet.getRange(i, 2).setValue(arrs[j][1]); sheet.getRange(i, 3).setValue(arrs[j][2]); break; } } } } function fetch_info(hojins) { var max_kensu, once_kensu, arrs, hs, temps; max_kensu = 100; once_kensu = 10; arrs = []; while (hojins.length > 0) {
hs = hojins.splice(0, once_kensu);
temps = fetch_info_ten(hs);
arrs = arrs.concat(temps);
}
return arrs;
}
function fetch_info_ten(hojins) {
//最大10件の法人番号を配列で与えると法人番号、名称、所在地を配列で返す。
var csv, url, result, html, ms, arrs, i, temps;
csv = hojins.join(",");
url = "http://www.houjin-bangou.nta.go.jp/matomete-kekka.html?houzinNoLst=";
result = UrlFetchApp.fetch(url + csv);
html = result.getContentText("UTF-8");
html = html.replace(/[\r\n]+/g, "");
ms = html.match(/<tr.*?>.*?法人番号[0-9]+件目.*?<\/tr>/g);
arrs = [];
for (i = 0; i < ms.length; i++) {
temps = ms[i].match(/<input.*?value="([0-9]+)".*? <td="">(.*?)<\/td>.*?
(.*?)<\/td>/);
temps[2] = temps[2].replace(/<span.*?>(.*?)<\/span>/, "$1");
temps[3] = temps[3].replace(/<span.*?>(.*?)<\/span>/, "$1");
arrs.push([temps[1], temps[2], temps[3]]);
}
return arrs;
}
[ 2015年11月25日 | カテゴリー: デジタル | タグ: Google Apps Script , マイナンバー ]
« Excel2013のピボットテーブルのラベル | 全てのシートの名前を配列で取得するマクロ »
貴重な情報ありがとうございます。
上記のスクリプトをコピペして実行しましたが、エラーとなり稼働しませんでした。。
こちらは現状のGASの仕様でも有効なスクリプトということでよろしいでしょうか。
ご確認頂けますと幸いです。