Google Apps Scriptー文字列の検索
最終更新日:2026年8月7日
Google Apps Scriptの文字列を検索する
| 項目 | Google Apps Script | Excel VBA | Python |
|---|---|---|---|
| 主な用途 | Google Workspace自動化 | Excel業務自動化 | 汎用自動化・データ分析 |
| 学習難易度 | 低(JavaScript系) | 中 | 低〜中 |
| 実行環境 | クラウド(無料) | Windows/Excel必須 | ローカル or クラウド |
| Googleサービス連携 | 最高 | 低 | API経由で可 |
Google Apps Scriptで文字列の検索を行う場合、主に3つのメソッドを使用します。それぞれの構文や例文を紹介します。
indexOfメソッド
●構文 String.indexOf(word[, from]) ※fromの引数は省略可。省略すると最初の文字から検索する。
●役割 文字列から検索文字列wordをfrom文字目から最後の文字まで検索し、一致した位置を返す。
lastIndexOfメソッド
●構文 String.lastIndexOf(word[, from]) ※fromの引数は省略可。省略すると最後の文字から検索する。
●役割 文字列から検索文字列wordをfrom文字目から最初の文字まで検索し、一致した位置を返す。
searchメソッド
●構文 String.search(word) ※word引数は文字列だけではなく、正規表現も指定可
●役割 文字列から検索文字列wordを最初の文字から最後の文字まで検索し、一致した位置を返す。検索文字列に一致するものが無い場合、「-1」が出力される。
配列内の検索結果に応じて処理を分ける
検索文字列に一致するものが無ければ「-1」が出力される性質を利用し、以下の構文でメッセージボックスに表示される文字列を分岐させることが出来ます。
if (ary.indexOf(str) == -1) {
} else {
}
例:
function nashi() {
var str = 'ねこ';
var ary = ['いぬ', 'さる', 'きじ', 'いぬ', 'さる', 'きじ'];
if (ary.indexOf(str) == -1) {
Browser.msgBox(str + 'は存在しません');
} else {
Browser.msgBox(str + 'は存在します');
}
}
この方法は、フォルダの検索等、様々な場面で活用出来るので便利です。
文字列を検索する例文
function myFunction() {
let testString = "りんご、みかん、ぶどう、いちご、もも";
Logger.log(testString.indexOf("みかん"));
Logger.log(testString.lastIndexOf("みかん"));
Logger.log(testString.search("みかん"));
}
いずれも検索でヒットした位置を返しますので、文字列の前から4番目の位置がログ出力されます。
indexOfとlastIndexOfの違い
indexOfとlastIndexOfの違いは検索する方向です。
indexOfメソッド:文字列の前から後ろに向かって検索する前方検索
lastIndexOfメソッド:文字列の後ろから前に向かって検索する後方検索
検索対象の文字列に初めてヒットした位置を返すため、検索にヒットする場所が複数ある場合、indexOfとlastIndexOfの結果に違いが生じます。
function myFunction() {
let testString = "りんご、みかん、ぶどう、いちご、もも";
Logger.log(testString.indexOf("ご"));
Logger.log(testString.lastIndexOf("ご"));
}
この場合、indexOfは最初の文字から検索するので、「りんご」の「ご」をヒットしますが、lastIndexOfは最後の文字から検索するので、「いちご」の「ご」をヒットします。
searchは正規表現の検索も可
searchメソッドでは、文字列だけではなく正規表現の検索も行なえます。ただ、指定出来る引数は検索ワードだけなので、検索をスタートさせる位置を指定することは出来ません。
スプレッドシートから特定の値を検索
スプレッドシートの検索に必要なのはシート、検索する値、検索対象の列です。下記の手順で特定の値を検索出来ます。
引数を決める
シート全体の検索をする場合は、列の指定は不要ですが、今回は特定の列を検索しますので、シート、検索する値、検索対象の列の3つが引数です。
function findRow(sheet, val, col) {
// 処理
}
戻り値を決める
戻り値は、検索結果の行、列、もしくは両方等のように様々あります。今回は、値を見つけた行数にします。見つからなかった場合は0を返します。
アルゴリズムを考える
アルゴリズムとしては、シートの最初の行から最終行まで走査→指定の列の値が検索する値と等しいなら→その行数を返す→さもなくば→0を返す、という流れです。これでスクリプトを組むと以下のようになります。
function findRow2(sheet, val, col) {
var lastRow = sheet.getDataRange().getLastRow(); // 対象となるシートの最終行を取得
for (var i = 1; i <= lastRow; i++) {
if (sheet.getRange(i, col).getValue() === val) {
return i;
}
}
return 0;
}
この記事のポイント
- indexOfは前方検索、lastIndexOfは後方検索、searchは正規表現も使える検索メソッドという使い分けができる
- indexOf系メソッドは検索文字が見つからない場合「-1」を返すため、この性質を使って処理を分岐できる
- スプレッドシートの検索は、最終行までループしながら
getRange(行, 列).getValue()で値を比較する実装が基本形になる
よくある質問
- Q. indexOfとsearchメソッドの違いは何ですか?
- A. indexOfは文字列の完全一致検索と検索開始位置の指定ができますが、正規表現は使えません。searchは正規表現を使った柔軟な検索ができますが、検索開始位置を指定することはできません。
- Q. スプレッドシートの検索で大量の行がある場合、処理が遅くなりませんか?
- A. 1行ずつgetRange().getValue()を呼び出すループは行数が多いと遅くなる場合があります。大量データを扱う場合は、getDataRange().getValues()で全データを一度に配列として取得し、配列に対してループ処理する方が高速です。
- Q. 大文字・小文字を区別せずに検索したい場合はどうすればよいですか?
- A. searchメソッドで正規表現のiオプションを使う(例:
str.search(/word/i))か、あらかじめ比較対象の文字列をtoLowerCase()等で統一してからindexOf等で比較する方法があります。
関連記事
まとめ
Google Apps Scriptで文字列の検索を行う際、indexOfがよく用いられます。ネット上でも、これを使ったサンプルコードが豊富です。ただ、検索に一致するワードが複数あり、後方検索の方が良い場合はlastIndexOfメソッドが使われます。通常の文字列表現だけではなく、正規表現による検索を行いたい場合はsearchメソッドを用いるといった具合に、状況によって使い分けましょう。
▼ アクロビジョンについて


