こんにちは。プライベートではいろいろ模索中の @wezardnet です👻
それはさておき Google Apps Script(GAS) エキスパートの @soundTricker さんが何やらつぶやいていたので目を留めて見ると、やっと GAS に実装されたのか!と思い試してみることにしました (゚∀゚)キタコレ!!
NextでGASのアップデートは特になかった(GSuite Add-onsはベータになりました)ですが、少し前(4/5)にいくつかアップデートがありました
— おーはし(さんとりー) (@soundTricker318) April 11, 2019
大きいのはSheetsでFind TextがGASから使えるようになりました。 #gasja
これまでスプレッドシートで文字列を検索する機能は GAS にはなく、自力でがんばるしかありませんでした💦💦
今回は TextFinder クラスでよく使われると思われる文字列検索と文字列置換を試してみたので、情報共有したいと思います✍️
尚、公式ドキュメントは Class TextFinder になりますので、他の機能(メソッド)を知りたい方はお読みください。
サンプルデータ
文字列検索するためにはある程度のデータが必要になるので、得意先マスタのスプレッドシートを使うことにします。このシートには 10,000 件のダミーデータが入力されています。
文字列検索(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 件のようです。
本当に合ってるかどうかスプレッドシート標準機能で確認します。
双方で一致するので 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 件になります。
本当に合ってるかどうかスプレッドシート標準機能で「ねこぽん」 → 「日本料理」の逆パターンを確認してみます。
こちらも双方で一致するので OK そうですね。
スプレッドシートを簡易データベースとして扱う時に少し楽になりますね👍
本記事で紹介したスクリプトは GitHub に置いておきます。。。