表記ゆれを一括置換 ―(株)と 株式会社 が混在するカオスに終止符を

実際のビジネスシーンで使える自動化100例をGASで実装するシリーズ「GAS自働化100本ノック」。その記念すべき1本目

スプレッドシートの地味に面倒な作業 – 検索と置換

表記ゆれの例

取引先リストを見ると、こんな状態になっていること、ありますよね?

(株)山田商事 
株式会社山田商事
(株)山田商事
㈱ヤマダ商事

同じ会社なのに4パターン。そう、表記ゆれです。

こうした表記ゆれは、ピボットテーブルやVLOOKUPが一致しない原因になり、重複チェックもすり抜けます。顧客データや商品マスタが汚れていると、集計結果そのものが信用できなくなります。

そこで登場する機能が 検索と置換ですが、この検索と置換、地味に面倒ですよね?
数パターンならまだしも、、10個、20個と増えてくると1回の作業に何分もかかります。置換漏れや順序ミスも起きやすくなります。

GASなら「置換辞書」シートにルールを並べるだけ

それなら、GASで楽しちゃいましょ!
「置換辞書」シートにルールを並べるだけで、ワンクリック一括置換できちゃいます!

コード.gs

// コード.gs
/**
 * 表記ゆれを辞書ベースで一括統一する
 * 「置換辞書」シートにルールを定義 → 対象シートを一括変換
 */

function normalizeText() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();

  const dictSheet = ss.getSheetByName('置換辞書');
  if (!dictSheet) {
    SpreadsheetApp.getUi().alert('「置換辞書」シートが見つかりません。\n先に作成してください。');
    return;
  }
  const dictData = dictSheet.getDataRange().getValues();
  const rules = [];
  for (let d = 1; d < dictData.length; d++) {
    const before = String(dictData[d][0]);
    const after  = String(dictData[d][1]);
    if (before === '') continue;
    rules.push({ before: before, after: after });
  }
  if (rules.length === 0) {
    SpreadsheetApp.getUi().alert('置換辞書にルールが登録されていません。');
    return;
  }

  const targetSheet = ss.getActiveSheet();
  if (targetSheet.getName() === '置換辞書') {
    SpreadsheetApp.getUi().alert('置換辞書シート自体は変換対象外です。\n変換したいシートを選択してから実行してください。');
    return;
  }

  const range = targetSheet.getDataRange();
  const values = range.getValues();
  let totalReplacements = 0;

  for (let i = 0; i < values.length; i++) {
    for (let j = 0; j < values[i].length; j++) {
      if (typeof values[i][j] !== 'string') continue;

      const original = values[i][j];
      let replaced = original;

      for (let r = 0; r < rules.length; r++) {
        replaced = replaced.split(rules[r].before).join(rules[r].after);
      }

      if (replaced !== original) {
        values[i][j] = replaced;
        totalReplacements++;
      }
    }
  }

  range.setValues(values);

  SpreadsheetApp.getUi().alert(
    '完了しました。\n' +
    'シート「' + targetSheet.getName() + '」の ' + totalReplacements + ' セルを置換しました。'
  );
}

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('自動ボタン')
    .addItem('表記ゆれ置換(辞書ベース)', 'normalizeText')
    .addToUi();
}

使い方

① 新規または既存のスプレッドシートを用意
表記ゆれを直したいデータがあるスプレッドシートを開きます。
新しいスプレッドシートで試してから本番に導入するのがおすすめです。

② 「置換辞書」シートを作成
シートを1枚追加し、名前を「置換辞書」にします。
A列に「変換前」、B列に「変換後」のルールを記入してください。

置換辞書ルールの例

※ ルールは自由に追加、変更できます。
※ 新しいスプレッドシートを用意した場合は、画像「表記ゆれの例」のようなシートも作る必要があります。

③ 拡張機能 → Apps Script のコード.gsに上記スクリプトをコピペして保存

④ スプレッドシートをリロード
メニューバーに「自動ボタン」が追加されます。

⑤ 変換したいシートを開いた状態で「自動ボタン」→「表記ゆれ置換(辞書ベース)」を実行

初めて実行すると「承認が必要です」というダイアログが表示されます。
以下の手順で許可してください。

  1. 「権限を確認」をクリック

  2. 自分のGoogleアカウントを選択

  3. 「詳細」をクリック → 「〇〇(安全ではないページ)に移動」をクリック

  4. 「許可(続行)」をクリック

これはGASがスプレッドシートのデータにアクセスするために必要な手順です。自分で貼り付けたコードなので安全です。承認は初回のみで、次回以降は表示されません。

⑥ 結果を確認
一括置換が実行されているはずです。

ワンポイント・レッスン

getActiveSpreadsheet() — GASからスプレッドシートを操作する出発点

コードの冒頭にあるこの部分を見てください。

const ss = SpreadsheetApp.getActiveSpreadsheet();

const dictSheet = ss.getSheetByName('置換辞書');

GASでスプレッドシートを操作するときは、大体 `SpreadsheetApp.getActiveSpreadsheet()` から始まります。これで「今開いているスプレッドシート」を取得し、変数 `ss` に入れます。

次に `ss.getSheetByName('置換辞書’)` で、スプレッドシートの中から特定のシートを名前で取り出します。

スプレッドシート → シート → データと、大きい箱から順に中身を取り出していくイメージです。この流れはGASのほぼすべてのスクリプトで共通なので、最初に覚えておくと便利です。

まとめ

  • 置換辞書シートにルールを並べてワンクリック実行するだけで、表記ゆれの一括統一が完了します。

  • ルールの追加・変更もシート上で完結し、コードを触る必要はありません。

  • 表記が統一されることで、VLOOKUP の不一致やフィルタの漏れといったデータ品質の問題も未然に防げます。


拡張コードで別タイプの表記ゆれをカバー

  • `03−1234−5678` – 電話番号が全角のまま

  • `ジョン・スミス` – 半角カタカナが読みにくい

  • `TANAKA@yamada.co.jp` と `tanaka@yamada.co.jp` – 同じアドレスなのに大文字小文字が違う

パターンが無限にあるため、辞書管理には向かないタイプの表記ゆれです。

拡張コードでは、これらの表記ゆれもワンクリックで解決します。

この記事の続きはnoteで公開しています。

noteで続きを読む

GAS,自動化自動化

Posted by botw