Google Apps Script (GAS) でシート内の文字列を一括置換する方法
Google Spreadsheet(スプレッドシート)を業務で活用していると、「シート内に点在する特定の文字列をすべて別の文字列に置き換えたい」という場面に頻繁に遭遇します。手作業で1つずつ修正するのは非効率であり、見落としによる人為的ミス(ヒューマンエラー)のリスクも高まります。そこで活躍するのが、Google Apps Script (GAS) を用いた「文字列の一括置換」の自動化です。
GASを用いてシート内の文字列を高速かつ正確に一括置換するための具体的なコード、そのメカニズム、実務での活用シーンから注意点に至るまで、初学者の方にも理解しやすいように徹底的に解説します。
GASを用いた文字列一括置換の目的とメリット
GASで文字列の一括置換を行う最大の目的は、データ更新・保守作業の全自動化と効率化です。例えば、商品名の一斉変更、担当者名の引き継ぎ更新、あるいは特定の数式内の参照先URLの変更など、スプレッドシート上に散らばる「旧テキスト」を「新テキスト」に瞬時に書き換えることが可能です。
- 作業時間の大幅な削減:数千行・数万行におよぶデータでも、スクリプトを実行するだけで一瞬で処理が完了します。
- 精度の向上:手動の「検索と置換」機能を使った場合の人為的ミスを排除し、正確に一括置換を実行できます。
- 定期処理の自動化:日次や週次で取り込む外部データに対して、決まった置換処理を自動で適用するようなシステム化が容易になります。
部署名を一括で置き換える
まずは、アクティブなシート全体を対象にして、特定の文字列を一括置換する最もシンプルで強力なコードをご紹介します。以下のコードをエディタに置いて動かせば、すぐに一括置換を試すことができます。
const sheet = SpreadsheetApp.getActiveSheet();
const textFinder = sheet.createTextFinder("旧テキスト");
textFinder.replaceAllWith("新テキスト");
上のコードがやっていること
このたった3行のコードには、GASでスプレッドシートを操作するための重要なエッセンスが詰まっています。1行ずつ確実に理解していきましょう。
1行目:対象シートの取得
const sheet = SpreadsheetApp.getActiveSheet();
この行では、SpreadsheetAppクラスのgetActiveSheet()メソッドを呼び出し、現在アクティブになっている(開いている)シートのオブジェクトを取得し、定数sheetに格納しています。このオブジェクトが、以降の操作の基点となります。
2行目:TextFinderオブジェクトの生成
const textFinder = sheet.createTextFinder("旧テキスト");
シートオブジェクトに対してcreateTextFinder("検索したい文字列")メソッドを実行しています。このメソッドは、指定した文字列を検索するための「TextFinder(テキストファインダー)」と呼ばれる特殊なオブジェクトを生成します。ここでは、置換対象となる「旧テキスト」を引数に指定しています。この機能は、スプレッドシート標準の「検索と置換」機能をプログラムから呼び出しているイメージに近いです。
3行目:一括置換の実行
textFinder.replaceAllWith("新テキスト");
生成したtextFinderオブジェクトに対して、replaceAllWith("新しい文字列")メソッドを実行します。このメソッドが呼ばれた瞬間、シート内で該当する「旧テキスト」がすべて「新テキスト」に一括変更されます。
TextFinder の置換が触るもの
上記の基本コードをさらに強力に使いこなすために、TextFinder機能の仕様とメカニズムについて順に説明します。
一括変更の効率化(数式や値の全自動置換)
TextFinderを使用した置換処理は、単なるテキストデータだけでなく、数式や値に含まれる特定テキストも全自動で置換できるという優れた仕様を持っています。例えば、シート内に以下のような数式が複数入力されているとします。
=SUMIF(A:A, "旧テキスト", B:B)
この状態で先ほどのスクリプトを実行すると、セルの表示上の値だけでなく、背後にある数式内の文字列も対象となり、以下のように自動で書き換わります。
=SUMIF(A:A, "新テキスト", B:B)
これにより、複雑なダッシュボードや集計シートのメンテナンスなど、数式の一斉メンテナンス作業が劇的に効率化されます。
範囲限定(特定Rangeに対する置換)
実務では、「シート全体ではなく、特定の列や特定のセル範囲だけで置換を行いたい」というケースが多々あります。TextFinderは、シート全体だけでなく、特定Range(セル範囲)オブジェクトに対してcreateTextFinderを呼ぶことも可能です。
以下は、A列(A1:A100)の中だけで文字列を一括置換する例です。
const sheet = SpreadsheetApp.getActiveSheet();
const range = sheet.getRange("A1:A100");
const textFinder = range.createTextFinder("旧テキスト");
textFinder.replaceAllWith("新テキスト");
このように、sheetの代わりにrangeに対してcreateTextFinderメソッドを呼び出すことで、置換の影響範囲を厳密にコントロールすることができます。想定外の箇所まで置換されてしまう事故を防ぐためにも、範囲を限定するテクニックは非常に重要です。
部署名以外で使うとき
GASでの文字列一括置換は、アイデア次第で様々な業務改善に応用できます。ここでは代表的な実務での活用シーンをいくつか紹介します。
1. 組織変更に伴う部署名・役職名の一斉更新
毎年・毎月の組織変更の際、大量の社員名簿や経費精算フォーマットに記載された旧部署名を新部署名に更新する必要があります。GASで複数の置換ペア(旧部署名と新部署名)を配列やオブジェクト(辞書)として定義し、ループ処理を組み合わせることで、数十個のキーワードであってもワンクリックで一括更新が完了します。
2. インポートデータのデータクレンジング
外部のシステム(CSVやAPI経由)から取得したデータには、不要なスペース、表記ゆれ(「株式会社」と「(株)」など)、特定の特殊文字が含まれていることがよくあります。データをシートに書き込んだ直後に、特定のルールに基づいたTextFinderの置換処理を自動で走らせることで、常にクリーンなデータ状態を保つことができます。
3. ドキュメントやテンプレートの自動生成
ひな形となるテンプレートシートを用意しておき、特定のプレースホルダー(例:{{会社名}} や {{請求金額}})を埋め込んでおきます。GASでこのテンプレートをコピーし、プレースホルダーを顧客データで一括置換することで、請求書や見積書を何百枚も一瞬で自動生成するシステムを構築できます。
部分一致で隣まで書き換わる
非常に便利な一括置換機能ですが、使用にあたってはいくつかの注意点や陥りやすい落とし穴が存在します。これらを事前に把握しておくことで、堅牢なスクリプトを構築できます。
大文字・小文字、全角・半角の区別
デフォルトの状態では、TextFinderはテキストの大文字と小文字を区別しない設定になっている場合があります(状況によって挙動が変わる可能性があります)。もし「大文字小文字を厳密に区別したい」場合や、「正規表現を使って柔軟に検索したい」場合は、TextFinderオブジェクトに対して追加の設定を行う必要があります。
textFinder.matchCase(true); // 大文字・小文字を区別する
textFinder.useRegularExpression(true); // 正規表現を使用する
これらのオプションメソッドをreplaceAllWith()の前にチェーンさせることで、より精密な置換条件を指定できます。
意図しない部分一致による誤置換
「旧テキスト」という文字列を置換する際、単語の一部にその文字列が含まれている場合(例:「新旧テキストブック」など)も置換の対象となってしまいます。完全に一致するセルのみを対象としたい場合は、matchEntireCell(true)メソッドを追加して、セル内のテキスト全体が完全に一致する場合のみ置換するように設定してください。
不可逆な操作であること
GASによる一括置換処理は、実行後に「元に戻す(Ctrl+Zなど)」機能で簡単に取り消すことができない場合があります(特にトリガーによる自動実行時など)。数千行のデータが意図せず書き換わってしまうと大惨事になりかねないため、本番データに対してスクリプトを実行する前には、必ずシートのバックアップを取得するか、テスト用のシートで動作確認を行うことを強く推奨します。
まとめ
Google Apps Script (GAS) を活用して、スプレッドシート内の文字列を一括置換する方法を詳しく解説しました。
createTextFinderとreplaceAllWithを組み合わせることで、たった数行のコードで高速な一括置換が可能です。- 数式やセルの値に含まれる特定のテキストも、全自動で漏れなく置換できます。
- シート全体だけでなく、特定Range(セル範囲)に限定して安全に置換処理を実行することも可能です。
この機能をマスターすれば、手作業で行っていた面倒なデータ修正や文字列変更の作業から解放され、より創造的な業務に時間を割くことができるようになります。ぜひ、ご自身の業務環境に合わせてコードをカスタマイズし、スプレッドシートの自動化に役立ててください。

