【コピペで解決】GASで郵便番号の表記ゆれを自動クレンジング!ハイフン・全角半角も一括統一

アイキャッチ画像 自動化事例

「顧客リストの郵便番号、入力者によって表記がバラバラ…」
「DMを送る前に、大量の郵便番号からハイフンを消す作業が大変…」
「全角と半角が混在していて、VLOOKUP関数がうまく機能しない…」

企業の顧客データ管理において、このような郵便番号の表記ゆれに関するお悩みは尽きません。手作業で一つひとつ修正するのは時間がかかる上に、ミスも発生しやすくなります。

この記事では、その課題をGoogle Apps Script(GAS)で一挙に解決する方法を解説します。

【課題】よくある郵便番号の表記揺れパターン

まず、実際のデータで起こりがちな「郵便番号の表記揺れ」には、どのようなパターンがあるか見ていきましょう。

パターン郵便番号データ例問題点
ハイフンなし1000005ハイフンがない
全角数字・全角ハイフン100-0005全角が混じっている
半角ハイフン100-0005(基準とする場合もあるが、混在が問題)
不要なスペース100 – 0005ハイフンの前後にスペースがある
全角長音100ー0005ハイフンではなく長音になっている
「〒」マーク付き〒100-0005記号が混じっている

これらのデータが混在していると、郵送システムの仕様に合わなかったり、データ抽出の際に正確な件数を取得できなかったりといった問題が発生します。

【解決】今回の修正条件

上記の課題を解決するため、今回はすべての郵便番号を以下のルールに沿って統一します。

【ゴール】すべての郵便番号を『7桁の半角数字』(ハイフンあり)に統一する

BeforeAfter
1000005100-0005
100-0005100-0005
100 – 0005100-0005
〒1000005100-0005

このルールに統一することで、データの視認性やシステム連携時の互換性が格段に向上します。

【解決フロー】コピペで使える!郵便番号クレンジングGAS

ここからは、実際に課題を解決するための手順です。
今すぐ解決したい方は、以下手順を使えばボタン一つで表記揺れを解消できます。
具体的な設定方法を知りたい方は、【詳しく知りたい方へ】に飛んでください。

Step1:事前準備

1.対象データの用意

表記揺れを修正する郵便番号データ(ExcelまたはCSV形式)をご用意ください。
 ※本記事では、スプレッドシート上のサンプルデータを使用します。

2.スプレッドシートのコピー

郵便番号変換スプレッドシートを開き、コピーを作成してください。

Step2:対象データの更新

コピーしたスプレッドシートに対象データを貼り付けます。

変更前

Step3:郵便番号変換の実行

1.Google Apps Script(GAS)の実行許可(初回のみ)

「郵便番号変換開始」ボタンをクリック後、
Google Apps Script(GAS)の実行許可を行います。

GASボタン

2.変換の実行

許可後に実行すると、郵便番号の表記が自動で修正されます。

変更後

【詳しく知りたい方へ】処理の仕組みを解説

ここからは、エンジニアやGASの仕組みを詳しく知りたい方向けの解説です。

GASコード本体

今回使用したGASのコードはこのようになっています。

/**
 * 選択された範囲の郵便番号をクレンジングする関数
 * - 全角を半角に変換
 * - 不要な記号を削除
 * - 「3桁-4桁」の半角数字に統一
 */
function cleanUpPostalCodes() {
  try {
    const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();

    // 【1】出力シートのB6以降のデータをクリア
    sheet.getRange("B3:B").clearContent();

    // 【2】変換対象の郵便番号データを取得(A3以降)
    const lastRow = sheet.getLastRow();
    
    // 変換対象の郵便番号データが無ければ、アラートを出して処理を終了
    if (lastRow === 2) {
      Browser.msgBox('A列の3行目以降に、整形したい郵便番号データを入力してください。');
      return;
    }
    
    const range = sheet.getRange(`A3:A${lastRow}`);
    const values = range.getValues();
    const newValues = []; //クレンジング後の配列作成用

    // 【3】データクレンジングを開始
    for (let i = 0; i < values.length; i++) { // 変換対象の郵便番号データの数だけ繰り返す
      const cellValue = values[i][0]; //配列から外す
      const newRow = [];

      //セルが空白でなければクレンジング
      if (cellValue && typeof cellValue.toString === 'function') {
        let postalCode = cellValue.toString(); //文字列に変換
          
        // 1. 全角を半角に変換
        postalCode = postalCode.replace(/[A-Za-z0-9]/g, function(s) {
          return String.fromCharCode(s.charCodeAt(0) - 0xFEE0);
        });
          
        // 2. 数字以外のすべての文字を削除
        postalCode = postalCode.replace(/[^0-9]/g, '');
          
        // 3. 7桁の数字であれば、ハイフンを挿入してフォーマット
        if (postalCode.length === 7) {
          postalCode = postalCode.slice(0, 3) + '-' + postalCode.slice(3);
        }
          
        newRow.push(postalCode);
      } else {//セルが空白ならそのままnewRowに格納
        newRow.push(cellValue);
      }
      
      newValues.push(newRow); //クレンジング後の配列に追加
    }
    
    // 【4】クレンジングしたデータを更新
    const newRange = sheet.getRange(3,2,newValues.length,1); //クレンジング後の配列更新位置を取得
    newRange.setValues(newValues); //クレンジング後の配列をB列に更新

  } catch (e) {
    Browser.msgBox('処理中にエラーが発生しました。\n\nエラー内容:' + e.message);
  }
}

GASコードのポイント解説

  • 【1】出力シートのB3以降のデータをクリア
    まず、出力先となるB列の3行目以降を clearContent() でクリアし、前回の実行結果が残らないようにしています。
  • 【2】変換対象の郵便番号データを取得
    sheet.getLastRow()でデータが存在する最終行を取得し、入力元となるA3セルから最終行までの範囲のデータをgetValues()で取得します。
  • 【3】データクレンジング
    取得したデータを1行ずつループ処理で取り出し、クレンジングを行います。
    • postalCode.replace(/[A-Za-z0-9]/g, …): 全角の英数字をすべて半角に変換します。
    • postalCode.replace(/[^0-9]/g, ”): 正規表現を使い、数字以外のすべての文字(ハイフン、スペース、〒など)を一括で削除しています。
    • postalCode.slice(0, 3) + ‘-‘ + postalCode.slice(3): 数字だけになった文字列が7桁の場合、slice()で3桁目までと4桁目以降を分割し、間にハイフンを挿入してフォーマットを整えます。
  • 【4】クレンジングしたデータを更新
    整形後のデータが格納された配列 newValues を、setValues() を使ってB列の3行目以降に一括で書き込んでいます。

(参考)スプレッドシート関数で行う場合

GASを使わずに、スプレッドシートの標準機能だけでクレンジングすることも可能です。その場合は、複数の関数を組み合わせる(ネストする)ことで実現します。

使用する関数:

  • REGEXREPLACE(テキスト, 正規表現, 置換): 正規表現に一致した部分を置換します。
  • ASC(範囲): 全角の文字を半角に変換します。

組み合わせた数式:

=REGEXREPLACE(REGEXREPLACE(ASC(A2), "[^0-9]", ""), "(\d{3})(\d{4})", "$1-$2")
スプレッドシート関数でクレンジングする場合

この数式は、以下の処理を順番に行っています。

  1. ASC(A2)でセルA2の値を半角に変換します。
  2. 内側のREGEXREPLACE(…, “[^0-9]”, “”)で、数字以外の文字をすべて削除します。
  3. 外側のREGEXREPLACE(…, “(\d{3})(\d{4})”, “$1-$2”)で、7桁の数字を「3桁のグループ」と「4桁のグループ」に分け、その間にハイフンを挿入しています。

GASに比べて手軽ですが、元データを残したまま別の列に結果を出力する必要がある点や、処理のたびに数式をコピーする必要がある点が異なります。

数式コピーの手間はなくせる!

「処理のたびに数式をコピーする必要がある」点は、ARRAYFORMULA関数と組み合わせることで解消することができます。B2セルへ以下関数を入力するだけで、全ての行をクレンジングできます。

=ARRAYFORMULA(
  REGEXREPLACE(REGEXREPLACE(ASC(A2:A), "[^0-9]", ""), "(\d{3})(\d{4})", "$1-$2")
)
ARRAYFORMULAを使用した関数

まとめ

今回は、コピーしてすぐに使えるスプレッドシートを使って、面倒な郵便番号のクレンジング作業を自動化する方法をご紹介しました。

単純な繰り返し作業は、人間ではなくツールに任せるのが業務効率化の鉄則です。このスプレッドシートを導入することで、これまでクレンジング作業にかけていた時間を削減し、より分析や戦略立案といった付加価値の高い仕事に集中できるようになります。

この記事の方法で解決できないケースが発生した場合は、【お問い合わせフォーム】からお気軽にご連絡ください。別途、最適な解決策をご提案いたします。

※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。