アルメモ

アルフレートのアレやコレやメモ

アストルティア防衛軍襲撃予報の数式を変えて軽量化してみた

たぶん軽くなってると思う!

重いらしいですね!

アストルティア防衛軍襲撃予報Googleスプレッドシートがちょい重いと言われまして。

docs.google.com

全セルに突っ込んだ計算式が原因かなと。

軽くしよう!

Googleスプレッドシートで大量の繰り返し数式を軽量化する定番は ARRAYFORMULA ですね。

support.google.com

だがこれ OFFSET のような配列使える関数だとせっかく生成された配列が食われてしまいうまいこと動かない。

今回はこのパターンにハマっちゃう。

こういう時は LAMBDA で関数化して MAP で配列処理すればいい。

support.google.com

レッツ!LAMBDA!

youtu.be

ではない。

LAMBDAの読みは「ラムダ」です。

レッツ!ラムダ!

関数2つを組み合わせるとは言ってもやることはシンプル。

まず元々あった数式を確認。

=OFFSET('兵団'!$N$3, ARRAYFORMULA(MOD(COLUMN()-2+24*DATEDIF('兵団'!$B$5,$A2,"D"),31)), 0)

長ったらしいけど変化するのはじつは「$A2」と書いてある部分だけ。

なのでこれを引数として LAMBDA で関数化し、あとは MAP で配列を渡して結果の配列を展開できるようにすればOK。

support.google.com

MAP と LAMBDA で書き換えた数式はこんな感じ。

=MAP($A2:$A,LAMBDA(DT,IFERROR(OFFSET('兵団'!$N$3, ARRAYFORMULA(MOD(COLUMN()-2+24*DATEDIF('兵団'!$B$5,DT,"D"),31)), 0),"")))

MAP の第1引数渡す配列は $A2:$A と末尾の行番号を特定しない。

今後行が増えても安心。

IFERRORを追加したのは、検証中は最下行が空行でA列の値が無くエラー表示になっていたから。

今は最下行が空行ではないので意味はない。

実際のところどれだけ速くなったのか

わからぬ!

なんか気持ちヌッっと表示されるようになった気もするけど、比べて見てもイマイチ分からない。

環境によっては軽くなっているかもしれないかなということで。

数式の無い箇所は値だけがあるようにもなったので、そういう点でも速い要素はあるかも?

逆に表示がおかしくなったよとかあればご連絡ください。

まとめ

アストルティア防衛軍襲撃予報スプレッドシートの数式を書き換えてちょっぴり高速化!

配列扱う関数を使っているんで MAP と LAMBDA で実装。

たぶん速くなっていると思われます。

更新ついでに10月まで延長しておきました。

docs.google.com

なお LAMBDA はランバダではない。


ドラゴンクエストX(ドラクエ10)ランキング