Google Spreadsheetでテキストを検索したり、置換したりするときに便利な関数があります。それは、createTextFinderという関数です。この関数は、Google Apps Script(GAS)のスプレッドシートクラスに属するメソッドで、テキストを検索するオブジェクトを返します。このオブジェクトを使えば、テキストの位置や数を取得したり、テキストを別の文字列に置換したりすることができます。
- createTextFinder関数の基本的な構文と引数の意味
- createTextFinder関数でテキストを検索するプログラムサンプルとその結果
- createTextFinder関数でテキストを置換するプログラムサンプルとその結果
createTextFinder関数の基本的な構文と引数の意味
createTextFinder関数の基本的な構文は以下のとおりです。
var textFinder = spreadsheet.createTextFinder(findText);
ここで、spreadsheetはスプレッドシートオブジェクトで、SpreadsheetApp.getActiveSpreadsheet()などで取得できます。findTextは検索したいテキストで、文字列型の値を指定します。textFinderはテキストファインダーオブジェクトで、このオブジェクトにはさまざまなメソッドがあります。例えば、以下のようなメソッドがあります。
- findAll():テキストに一致するすべてのセルの範囲オブジェクトの配列を返します。
- findNext():テキストに一致する次のセルの範囲オブジェクトを返します。
- findPrevious():テキストに一致する前のセルの範囲オブジェクトを返します。
- replaceAllWith(replacement):テキストに一致するすべてのセルの内容を別の文字列に置換します。replacementは置換する文字列で、文字列型の値を指定します。
- replaceWith(replacement):テキストに一致する次のセルの内容を別の文字列に置換します。replacementは置換する文字列で、文字列型の値を指定します。
これらのメソッドの詳細は、公式ドキュメントを参照してください。
createTextFinder関数でテキストを検索するプログラムサンプルとその結果
では、実際にcreateTextFinder関数でテキストを検索するプログラムを書いてみましょう。以下のようなスプレッドシートを用意します。
このスプレッドシートで、「りんご」を検索して、その位置と数を表示するプログラムは以下のようになります。
function findText() {
// スプレッドシートオブジェクトを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// テキストファインダーオブジェクトを作成
var textFinder = spreadsheet.createTextFinder("りんご");
// テキストに一致するすべてのセルの範囲オブジェクトの配列を取得
var ranges = textFinder.findAll();
// テキストに一致するセルの数を取得
var count = ranges.length;
// テキストに一致するセルの位置を表示
for (var i = 0; i < count; i++) {
var row = ranges[i].getRow();
var column = ranges[i].getColumn();
Logger.log("「りんご」が見つかった位置:(" + row + ", " + column + ")");
}
// テキストに一致するセルの数を表示
Logger.log("「りんご」が見つかった数:" + count);
}
このプログラムを実行すると、以下のような結果が得られます。
「りんご」が見つかった位置:(2, 1)
「りんご」が見つかった位置:(3, 2)
「りんご」が見つかった位置:(4, 3)
「りんご」が見つかった数:3
createTextFinder関数でテキストを置換するプログラムサンプルとその結果
次に、createTextFinder関数でテキストを置換するプログラムを書いてみましょう。先ほどのスプレッドシートで、「りんご」を「バナナ」に置換するプログラムは以下のようになります。
function replaceText() {
// スプレッドシートオブジェクトを取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// テキストファインダーオブジェクトを作成
var textFinder = spreadsheet.createTextFinder("りんご");
// テキストに一致するすべてのセルの内容を「バナナ」に置換
textFinder.replaceAllWith("バナナ");
}
このプログラムを実行すると、以下のようにスプレッドシートが変更されます。
まとめ
この記事では、Google Spreadsheetでテキストを検索・置換する方法について紹介しました。createTextFinder関数を使えば、テキストの位置や数を取得したり、テキストを別の文字列に置換したりすることができます。この関数は、Google Apps Script(GAS)のスプレッドシートクラスに属するメソッドで、テキストを検索するオブジェクトを返します。このオブジェクトにはさまざまなメソッドがあります。詳細は、公式ドキュメントを参照してください。
参考文献
このブログでは断片的な説明になってしまっていますが、本書は幅広いGASの内容が網羅的に学べる本です。イチから学びたい方は是非読んでみてください。
すでにGASをある程度マスターした方にも辞書的に手元に置いておくと便利です。