Open5
スプレッドシート関数のあれこれ

スプレッドシート関数の「match」
セル範囲から、検索キーに一致するセル位置を返してくれるので、割と便利
この「検索キー」、第3引数を0(完全一致)にしたときも、ワイルドカード「*」を許容しているっぽい
(本当は正規表現でやりたかった)
/ | A | B | C |
---|---|---|---|
1 | あかさたな | あいうえお | かきくけこ |
=match("あ*お", A1:C1, 0)
( → 2 )

matchとchooseRows関数の組み合わせが爆速すぎた!
業務で20000レコード近くのスプシDBから、
GAS等なしで検索ツールを作る必要があったため、
当初は以下のような数式で組んでいた
(A列=入力させる検索キー、DB!A列=キー情報)
=arrayFormula( if( A:A = "", , ifna( vLookUp( A:A, DB!A:D, {2, 3, 4}, false ), "該当データなし" ) ) )
ところがこれが重いのなんの…1回の数式処理に150秒くらいかかる始末でした。
*メリットは、エラー処理でDBにない文字列("該当データなし"
)をいれられる、行ごとに判定するのでA列が歯抜けになってもいい
これで20000レコードクラスを扱うのは無理すぎたので、改良を考えました
↓その結果がこちら!↓
=arrayFormura( chooseRows( DB!B:D, ifError( match( A:A, DB!A:A, 0 ), 1 ) ) )
こいつで**[2〜4秒]**まで処理が速くなりました…!
*デメリットは、chooseRowsが数字の重複は可だけど、行番号である必要はあるので、エラー処理がDB内にある行を指定するしかないこと、かな?
やったぜ

よくつかってる「{}」や、chooseCols/chooseRows
{}は配列結合
スプシでの範囲結合はquery関数でやりがちだが、外部APIを通す都合、ハイパーリンク書式も死んだり、処理が遅かったりする
そこでセル範囲や文字列を結合して配列を生む関数が便利
chooseRows/chooseColsは行列の並び替え・抽出
上記の下位互換ではあるが、行や列を「行番号」等で指定できる
並び替えはもちろん、同じ列の繰り返しも可能。

配列結合くん、vStack
関数とかhStack
関数なんてあったんだね…!?

let、byRow、byColという深みでしかない関数を知ってから、変数定義・配列操作が自由にできて大満足