【GoogleAPPScript】住所の補正用のスクリプト

小ネタです。

 

住所の突合しないといけないくて、最初はEXCELのマクロでやろうとしていたけどマクロ付シートで保管するのが嫌だったので、Googleスプレッドシートを使用して突合しました。

最初はREGEXREPLACE関数で何とかできるかと思いましたが、それではどうにもならないのでGASの力を借りることにしました。

ユーザ関数を使用してChatGPTBardの力を借りてスクリプト完成、なんかもはや自分みたいなコピペの権化は不要になるんだなと思いつつ・・・


■スクリプト


function formatAddress(input) {
  if (!input) {
    return input;
  }
  
  // 漢数字を通常の数値に変換(最大四十二)
  input = input.replace(/一丁目/g, "1丁目");
  input = input.replace(/二丁目/g, "2丁目");
  input = input.replace(/三丁目/g, "3丁目");
  input = input.replace(/四丁目/g, "4丁目");
  input = input.replace(/五丁目/g, "5丁目");
  input = input.replace(/六丁目/g, "6丁目");
  input = input.replace(/七丁目/g, "7丁目");
  input = input.replace(/八丁目/g, "8丁目");
  input = input.replace(/九丁目/g, "9丁目");
  input = input.replace(/十丁目/g, "10丁目");
  input = input.replace(/十一丁目/g, "11丁目");
  input = input.replace(/十二丁目/g, "12丁目");
  input = input.replace(/十三丁目/g, "13丁目");
  input = input.replace(/十四丁目/g, "14丁目");
  input = input.replace(/十五丁目/g, "15丁目");
  input = input.replace(/十六丁目/g, "16丁目");
  input = input.replace(/十七丁目/g, "17丁目");
  input = input.replace(/十八丁目/g, "18丁目");
  input = input.replace(/十九丁目/g, "19丁目");
  input = input.replace(/二十丁目/g, "20丁目");
  input = input.replace(/二十一丁目/g, "21丁目");
  input = input.replace(/二十二丁目/g, "22丁目");
  input = input.replace(/二十三丁目/g, "23丁目");
  input = input.replace(/二十四丁目/g, "24丁目");
  input = input.replace(/二十五丁目/g, "25丁目");
  input = input.replace(/二十六丁目/g, "26丁目");
  input = input.replace(/二十七丁目/g, "27丁目");
  input = input.replace(/二十八丁目/g, "28丁目");
  input = input.replace(/二十九丁目/g, "29丁目");
  input = input.replace(/三十丁目/g, "30丁目");
  input = input.replace(/三十一丁目/g, "31丁目");
  input = input.replace(/三十二丁目/g, "32丁目");
  input = input.replace(/三十三丁目/g, "33丁目");
  input = input.replace(/三十四丁目/g, "34丁目");
  input = input.replace(/三十五丁目/g, "35丁目");
  input = input.replace(/三十六丁目/g, "36丁目");
  input = input.replace(/三十七丁目/g, "37丁目");
  input = input.replace(/三十八丁目/g, "38丁目");
  input = input.replace(/三十九丁目/g, "39丁目");
  input = input.replace(/四十丁目/g, "40丁目");
  input = input.replace(/四十一丁目/g, "41丁目");
  input = input.replace(/四十二丁目/g, "42丁目");
  
  // 条対応(最大五十一)
  input = input.replace(/一条/g, "1条");
  input = input.replace(/二条/g, "2条");
  input = input.replace(/三条/g, "3条");
  input = input.replace(/四条/g, "4条");
  input = input.replace(/五条/g, "5条");
  input = input.replace(/六条/g, "6条");
  input = input.replace(/七条/g, "7条");
  input = input.replace(/八条/g, "8条");
  input = input.replace(/九条/g, "9条");
  input = input.replace(/十条/g, "10条");
  input = input.replace(/十一条/g, "11条");
  input = input.replace(/十二条/g, "12条");
  input = input.replace(/十三条/g, "13条");
  input = input.replace(/十四条/g, "14条");
  input = input.replace(/十五条/g, "15条");
  input = input.replace(/十六条/g, "16条");
  input = input.replace(/十七条/g, "17条");
  input = input.replace(/十八条/g, "18条");
  input = input.replace(/十九条/g, "19条");
  input = input.replace(/二十条/g, "20条");
  input = input.replace(/二十一条/g, "21条");
  input = input.replace(/二十二条/g, "22条");
  input = input.replace(/二十三条/g, "23条");
  input = input.replace(/二十四条/g, "24条");
  input = input.replace(/二十五条/g, "25条");
  input = input.replace(/二十六条/g, "26条");
  input = input.replace(/二十七条/g, "27条");
  input = input.replace(/二十八条/g, "28条");
  input = input.replace(/二十九条/g, "29条");
  input = input.replace(/三十条/g, "30条");
  input = input.replace(/三十一条/g, "31条");
  input = input.replace(/三十二条/g, "32条");
  input = input.replace(/三十三条/g, "33条");
  input = input.replace(/三十四条/g, "34条");
  input = input.replace(/三十五条/g, "35条");
  input = input.replace(/三十六条/g, "36条");
  input = input.replace(/三十七条/g, "37条");
  input = input.replace(/三十八条/g, "38条");
  input = input.replace(/三十九条/g, "39条");
  input = input.replace(/四十条/g, "40条");
  input = input.replace(/四十一条/g, "41条");
  input = input.replace(/四十二条/g, "42条");
  input = input.replace(/四十三条/g, "43条");
  input = input.replace(/四十四条/g, "44条");
  input = input.replace(/四十五条/g, "45条");
  input = input.replace(/四十六条/g, "46条");
  input = input.replace(/四十七条/g, "47条");
  input = input.replace(/四十八条/g, "48条");
  input = input.replace(/四十九条/g, "49条");
  input = input.replace(/五十条/g, "50条");
  input = input.replace(/五十一条/g, "51条");


  // ASCのハイフン変換対応
  input = input.replace(/−/g, "-");
  input = input.replace(/ー/g, "-");
  input = input.replace(/ー/g, "-");

  //丁目、番地、番、号対応
  input = input.replace(/([0-9]+)条([0-9])/g, "$1条$2");
  input = input.replace(/([0-9]+)番地([0-9]+)号/g, "$1-$2");
  input = input.replace(/([0-9]+)番([0-9]+)号/g, "$1-$2");
  input = input.replace(/([0-9]+)番地([0-9])/g, "$1-$2");
  input = input.replace(/([0-9]+)番([0-9]+)/g, "$1-$2");
  input = input.replace(/([0-9]+)丁目([0-9]+)番地([0-9]+)号/g, "$1-$2-$3");
  input = input.replace(/([0-9]+)丁目([0-9]+)番([0-9]+)号/g, "$1-$2-$3");
  input = input.replace(/([0-9]+)丁目([0-9])/g, "$1-$2");
  input = input.replace(/([0-9])の([0-9]+)/g, "$1-$2");
  input = input.replace(/([0-9])丁目の([0-9]+)/g, "$1-$2");
  input = input.replace(/([0-9])番地の([0-9]+)/g, "$1-$2");
  input = input.replace(/([0-9])の([0-9]+)号/g, "$1-$2");
  input = input.replace(/([0-9])丁目の([0-9]+)号/g, "$1-$2");
  input = input.replace(/([0-9])番地の([0-9]+)号/g, "$1-$2");  
  input = input.replace(/([0-9])丁目/g, "$1");
  input = input.replace(/([0-9]+)番$/g, "$1");
  input = input.replace(/([0-9]+)番地$/g, "$1");
  input = input.replace(/([0-9]+)号$/g, "$1");

  
  return input;
}



function addPrefectureToAddress(address, prefectureCode) {
  //都道府県対応
  const prefectures = [
    { code: '01', name: '北海道' }, { code: '02', name: '青森県' }, { code: '03', name: '岩手県' },
    { code: '04', name: '宮城県' }, { code: '05', name: '秋田県' }, { code: '06', name: '山形県' },
    { code: '07', name: '福島県' }, { code: '08', name: '茨城県' }, { code: '09', name: '栃木県' },
    { code: '10', name: '群馬県' }, { code: '11', name: '埼玉県' }, { code: '12', name: '千葉県' },
    { code: '13', name: '東京都' }, { code: '14', name: '神奈川県' }, { code:'15', name: '新潟県' },
    { code: '16', name: '富山県' }, { code: '17', name: '石川県' }, { code: '18', name: '福井県' },
    { code: '19', name: '山梨県' }, { code: '20', name: '長野県' }, { code: '21', name: '岐阜県' },
    { code: '22', name: '静岡県' }, { code: '23', name: '愛知県' }, { code: '24', name: '三重県' },
    { code: '25', name: '滋賀県' }, { code: '26', name: '京都府' }, { code: '27', name: '大阪府' },
    { code: '28', name: '兵庫県' }, { code: '29', name: '奈良県' }, { code: '30', name: '和歌山県' },
    { code: '31', name: '鳥取県' }, { code: '32', name: '島根県' }, { code: '33', name: '岡山県' },
    { code: '34', name: '広島県' }, { code: '35', name: '山口県' }, { code: '36', name: '徳島県' },
    { code: '37', name: '香川県' }, { code: '38', name: '愛媛県' }, { code: '39', name: '高知県' },
    { code: '40', name: '福岡県' }, { code: '41', name: '佐賀県' }, { code: '42', name: '長崎県' },
    { code: '43', name: '熊本県' }, { code: '44', name: '大分県' }, { code: '45', name: '宮崎県' },
    { code: '46', name: '鹿児島県' }, { code: '47', name: '沖縄県' }
  ];

  // 住所情報の先頭に都道府県が含まれるか判定
  const isPrefectureIncluded = prefectures.some(prefecture => {
    const pattern = new RegExp(`^${prefecture.name}`);
    return pattern.test(address);
  });

  // 先頭に都道府県が含まれる場合はそのまま住所情報を返す
  if (isPrefectureIncluded) {
    return address;
  }

  // 都道府県コードに対応する都道府県を取得
  const selectedPrefecture = prefectures.find(prefecture => prefecture.code === prefectureCode);

  // 都道府県が存在しない場合は元の住所情報を返す
  if (!selectedPrefecture) {
    return address;
  }

  // 先頭に都道府県を付けた住所情報を返す
  return selectedPrefecture.name + address;
}


■呼び出すとき

デプロイしてあげてから

セルの中で以下の様にやってやればユーザ定義関数として使える。

「=addPrefectureToAddress(住所のセル,都道府県コードのセル)」

「= formatAddress(住所のセル) 」

コメント

このブログの人気の投稿

証券外務員1種勉強(計算式暗記用メモ)

GASでGoogleDriveのサブフォルダとファイル一覧を出力する

マクロ経済学(IS-LM分析)