Google Apps Scriptー文字列の検索

Google Apps Scriptの文字列を検索する

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+‘は存在します’);
}
}
この方法は、フォルダの検索等、様々な場面で活用出来るので便利です。

文字列を検索する例文

1 function myFunction(){
2 let testString = “りんご、みかん、ぶどう、いちご、もも”;
3 Logger.log(testString.indexOf(“みかん”));
4 Logger.log(testString.lastindexOf(“みかん”));
5 Logger.log(testString.search(“みかん”));
6 }
いずれも検索でヒットした位置を返しますので、文字列を前から4番目がログ出力されます。

indexOfとlastindexOfの違い

indexOfとlastindexOfの違いは検索する方向です。
indexOfメソッドー文字列の前から後ろに向かって検索する前方検索
lastindexOfメソッドー文字列の後ろから前に向かって検索する後方検索
検索対象の文字列に初めてヒットした位置を返す為、検索にヒットする場所が複数ある場合、indexOfとlastindexOfの結果に違いが生じます。
1 function myFunction(){
2 let testString = “りんご、みかん、ぶどう、いちご、もも”;
3 Logger.log(testString.indexOf(“ご”));
4 Logger.log(testString.lastindexOf(“ご”));
5 }
この場合、indexOfは最初の文字から検索するので、りんごの「ご」をヒットしますが、lastindexOfは最後の文字から検索するので、いちごの「ご」をヒットします。

searchは正規表現の検索も可

searchメソッドでは、文字列だけではなく正規表現の検索も行なえます。ただ、指定出来る引数は検索ワードだけなので、検索をスタートさせる位置を指定することは出来ません。

スプレッドシートから特定の値を検索

スプレッドシートの検索に必要なのはシート、検索する値、検索対象の列です。下記の手順で特定の値を検索出来ます。

引数を決める

シート全体の検索をする場合は、列の指定は不要ですが、今回は特定の列を検索しますので、シート、検索する値、検索対象の列の3つが引数です。
1 function findRow(sheet、val、col){
2 //処理
3 }

戻り値を決める

戻り値は、検索結果の行、列、もしくは両方等のように様々あります。今回は、値を見つけた行数にします。
見つからなかった場合は0を返します。

アルゴリズムを考える

アルゴリズムとしては、シートの最初の行から最終行まで走査→指定の列の値が検索する値と等しいなら→その行数を返す→さもなくば→0を返す
これでスクリプトを組むと以下のようになります。
1 function findRow2(sheet、val、col){
2
3 var lastRow = sheet.getDataRange().getLastRow(); //対象となるシートの最終行を取得
4
5 for(var i=1;1=lastRow;i++){
6 if(sheet.getDataRange(i,col).getValue()===val){
7 return i;
8 }
9 }
10 return 0;
11 }

まとめ

Google Apps Scriptで文字列の検索を行う際、indexOfがよく用いられます。ネット上でも、これを使ったサンプルコードが豊富です。ただ、検索に一致するワードが複数あり、後方検索の方が良い場合はlastindexOfメソッドが使われます。通常の文字列表現だけではなく、正規表現による検索を行いたい場合はsearchメソッドを用いるといった具合に、状況によって使い分けましょう。