GoogleAppsScript
gas

Google Apps Script でスプレッドシート内の文字列を検索する TextFinder を試してみる

こんにちは。プライベートではいろいろ模索中の @wezardnet です👻

それはさておき Google Apps Script(GAS) エキスパートの @soundTricker さんが何やらつぶやいていたので目を留めて見ると、やっと GAS に実装されたのか!と思い試してみることにしました (゚∀゚)キタコレ!!

これまでスプレッドシートで文字列を検索する機能は GAS にはなく、自力でがんばるしかありませんでした💦💦

今回は TextFinder クラスでよく使われると思われる文字列検索と文字列置換を試してみたので、情報共有したいと思います✍️

尚、公式ドキュメントは Class TextFinder になりますので、他の機能(メソッド)を知りたい方はお読みください。


サンプルデータ

文字列検索するためにはある程度のデータが必要になるので、得意先マスタのスプレッドシートを使うことにします。このシートには 10,000 件のダミーデータが入力されています。

image01.png


文字列検索(TextFinder:findAll)

まずはスプレッドシート内の文字列を検索してみます。雑なサンプルコードを以下に示します ☆(・ω<)

function findAll(){

var spread = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = spread.getSheets()[0] ;

var textFinder = sheet.createTextFinder('日本料理');
var ranges = textFinder.findAll();
Logger.log('ranges.length = ' + ranges.length) ;

for ( var i = 0; i < ranges.length; i++ ) {
Logger.log('A1Notation = ' + ranges[i].getA1Notation()) ;
}
}

上記のスクリプトを実行した結果はログに吐かれます。「日本料理」にヒットするセルの件数は 134 件のようです。

image02.png

本当に合ってるかどうかスプレッドシート標準機能で確認します。

image05.png

双方で一致するので OK そうです。


文字列置換(TextFinder:replaceAllWith)

次にスプレッドシート内の任意の文字列を置換してみます。雑なサンプルコードを以下に示します ☆(・ω<)

function replaceAllWith(){

var spread = SpreadsheetApp.getActiveSpreadsheet() ;
var sheet = spread.getSheets()[0] ;

var textFinder = sheet.createTextFinder('日本料理');
var result = textFinder.replaceAllWith('ねこぽん');

Logger.log('result = ' + result) ;
}

上記のスクリプトを実行した結果はログに吐かれます。「日本料理」 → 「ねこぽん」に文字列置換した結果は 134 件になります。

image03.png

本当に合ってるかどうかスプレッドシート標準機能で「ねこぽん」 → 「日本料理」の逆パターンを確認してみます。

image04.png

こちらも双方で一致するので OK そうですね。

スプレッドシートを簡易データベースとして扱う時に少し楽になりますね👍

本記事で紹介したスクリプトは GitHub に置いておきます。。。