見出し画像

【超最新】Googleスプレッドシート のBYROW / BYCOL がこっそりアップデート【メガ進化】

前回の平日更新記事で次回予告した「和暦変換」は1週遅れます

先に 今週見つけた Googleスプレッドシートの最新ネタを書きたいなと。

土日更新の記事は Excel 14の新関数シリーズ の途中なんで、ちょうどテーマが切り替わるタイミングの 平日更新記事の方 に差し込ませていただきます。

前回の記事(前回まではチェックボックス関連をやってました)

Googleの公式アップデート情報にも見当たらず、世間でもまったく話題にならなっていませんが・・・。

わざわざ急いで記事書いて先出するくらい mir的にはインパクトの大きいアップデートです。メガ進化です!



BYROW、BYCOL の アップデート

今回こっそりアップデートされていたのは、今年 2022年9月に EXCELから輸入されたばかりの LAMBDA ヘルパー関数の BYROWとBYCOL の2つ 。


※ その後の検証で、BYROW、BYCOLだけでなく LAMBDAヘルパー関数の全てが 以下のアップデートがされていることがわかりました。



あ…ありのまま 今 起こった事を話すぜ!

今週 2022年12月6日 に家で スプレッドシートいじって、なにげなく式を組んで入れた この式、 

=BYCOL(A2:D12,LAMBDA(c,FILTER(c,c<>"")))

「おれは この式がエラーになると思ったら、いつのまにか正しく動いていた」

列毎に空白セルを上に詰める処理だけど・・・

な… 何を言っているのか・・・・・・・・・ わからねーと思うが・・・・・・・・・ 

おれも・・・ 何をされたのか・・・・・・・ わからなかった・・・・・・・・・


なにが凄いのか ピンときませんよね?

簡単に言ってしまえば、今まで BYROW,BYCOLでは出来なかった、

行毎、または列毎に 単一行(単一列)の 配列を 返せる

ように気づいたら変わってたってことなんです。

少し BYROW,BYCOLについて おさらいしながら 説明しましょう。



LAMBDA ヘルパー関数 BYROW / BYCOL のおさらい

BYROW,BYCOLは、難易度高めのLAMBDAヘルパー関数の中では 最も扱いやすく実用的な 関数で、mirの厨二的 区分だと 火 と 水 に分類しています。

使い方や活用については、Excelからの 輸入直後に 検証記事を書いています。

mir的には LAMBDAヘルパー関数は、今までの関数の概念を変える かなりイノベーティブな関数なんですが、世間的にはまだまだ認知度も利用度も低いんですよね。

Googleスプレッドシートはおろか、先に使えるようになった Excel ユーザーですら 使いこなせている人(使ったことがある人)は少ないんじゃないでしょうか?

すごーく勿体ないです。



今まで BYROW 、BYCOL で出来たこと

BYROW、BYCOL はざっくり言うと、「いままで スピらなかった(スピル処理が出来なかった)ものが、スピるようになる 関数」と言えます。

Googleスプレッドシート的に 言えば、 Arrayformulaが効かない処理と組み合わせて活用できる 関数です。

たとえば

■BYROW、BYCOLで出来ること
・行毎の 合計、平均値、最大値、最小値 の算出
・行毎の COUNTA 、COUTIF、SUMPRODUCT
・行毎の TEXTJOIN (文字列結合)
・行毎に INDIRECT(単体セルの取得)

※ BYCOLの場合は 列毎
※上記以外にもあります

こんなことが出来るわけですね。

もちろん上記の一部の処理は 工夫すれば Arrayformula との組み合わせでもスピル処理できますが、式が複雑化して難易度が上がります。

それに比べると BYROW, BYCOL は、記述(式の構成)が独特なので 慣れが必要ですが、割とシンプルな記述ですみます。

慣れてしまえば、Arrayformulaよりも簡単なんです。



今まで BYROW、BYCOLで出来なかったこと

BYROW、BYCOLを使う上での注意点、出来ないことについても 前回の検証で触れています。

今まではこのエラーだった

画像のエラーメッセージにもあるように、 BYROW, BYCOL の行毎、列毎の結果は 「単一の値」のみが許可されており、「配列」(複数セルにスピルする結果)は 扱えなかったのです。

最終的に BYROWは 縦方向に展開される配列、BYCOLは 横方向に展開される 配列 となるので、その中の 行毎、列毎が 配列だと 配列のネスト(入れ子)ってことで NGだったようです。

つまり 以下のような 配列を返す 関数の処理は BYROW,BYCOLでは 出来ませんでした。

■BYROW、BYCOLで出来なかったこと (今までは)
・行毎の FILTER関数による 絞り込み
・行毎の SORT関数による 並び替え
・行毎の UNIQUE関数による 重複排除
・行毎に INDIRECT(1行、または1列のセル範囲の取得)

※ BYCOLの場合は 列毎
※上記以外にもあります

これが出来たら良いのにと少し不満はあったものの、Excelの LAMBDA + BYROW(BYCOL)も同じ仕様なんで、こういうものなんだと諦めてましたが・・・。

これが 今週(2022年12月上旬)試したら、出来るようになってたんです!


貴重映像:これが BYROWのアップデートをとらえた瞬間だ!

おわかりいただけただろうか?

煽り文が 川口浩 探検隊(のちに 藤岡宏を新隊長として復活)っぽい感じにw

あっちと違って 「アマゾンの奥地で 未確認生物を カメラはとらえた!」といいつつ、ぼやけた遠目の映像で 影がちらっと映るだけ、なんてことはなく鮮明な gif動画を残しましたよ~。

ちょうど 【LAMBDA / XLOOKUP】Googleスプレッドシート新関数 検証 -1 の記事で 使った シートのデータが残っており、まだ アップデート前の当時の貴重な エラー表示状態 が保持されていたので、引数に変化を加えて 再計算させてみました。

勝手に更新はされないんですね。

当時(2022/9/15)に 式を入れた時は エラーとなった LAMBDA + BYROW + FILTERで 横方向に絞り込みをする数式ですが、再計算させたらエラーが解消され 行毎に フィルタされた配列が返っているのがわかりますね。

ちなみに、これ 一度 エラー解消しちゃったら 二度と同じエラー状態には戻せません。本当に貴重かもw



アプリ版は順次 アップデート対応、ヘルプは未更新

12/6 午前の時点では 上記のように iOS版は 今回の BYROWのアップデートに対応できていませんでしたが、夕方に Googleスプレッドシートアプリのバージョンアップが配信され 適用したら エラーが解消されました。

あててみた

Android アプリ版のGoogleスプレッドシートは 少し早くて、12/6朝の時点では アプリが自動更新されていたのか 使えるようになっていました。

ちなみに Googlleの 公式ヘルプですが、こちらは 2022/12/7 時点では 未更新です。BYROWの説明の備考は 「単一の値」という表記のままですね。

しかし、本当にどこにも情報がない・・・。



アップデート後の BYROW,BLCOLで出来るようになったこと

上で「出来なかった」とリストアップしたものが、今回のアップデートで いずれも「出来る」になりました。

■BYROW、BYCOLで出来るようになったこと
・行毎の FILTER関数による 絞り込み
・行毎の SORT関数による 並び替え
・行毎の UNIQUE関数による 重複排除
・行毎に INDIRECT(1行、または1列のセル範囲の取得)

※ BYCOLの場合は 列毎
※上記以外にもあります

細かい説明なしですが、一気に実例を見ていきましょう。


列毎の FILTE関数による絞り込み (空白詰め)

=BYCOL(A2:D12,LAMBDA(c,FILTER(c,c<>"")))


列毎の SORT関数による 並び替え (昇順)

=BYCOL(A2:D12,LAMBDA(c,SORT(c)))


行毎の UNIQUE関数による 重複排除

=BYROW(A2:G7,LAMBDA(r,UNIQUE(r,true)))


行毎に INDIRECT(シート毎に1行範囲の取得)

=BYROW(A2:A6,LAMBDA(r,INDIRECT(r&"!A1:G1")))

これらは、今までは REDUCEを使って配列をプッシュしていく複雑な式を組み立てる必要がありました。

いずれもシンプルな式でスピるんで、かなり実用的に使えるんじゃないでしょうか?



その他の検証

最後に アップデート(メガ進化)後の BYROW、BYCOL の出来ないこと、Excel側はどうなってるか?を確認しておきましょう。


アップデート後の BYROW,BYCOL の出来ないこと

行毎(列毎)に返せる ものは 1行(1列)の配列に限定されます。複数行(複数列)の配列は返せません。

これは当然ですね。仮に BYROW で 行毎の返り値が 2行 以上だと 下にどんどんズレちゃいます。

試しに 行毎の INDIRECT で各シートの 1行ではなく 2行分を取得する式

=BYROW(A2:A6,LAMBDA(r,INDIRECT(r&"!A1:G2")))

これを入れた場合は以下のエラーメッセージが出ます。

Result should be a single row.

エラーメッセージ

まだ エラーメッセージは英語ですが、簡単な単語なんでわかりますよね? 「結果は 1 行である必要があります。」というエラーになっています。

複数行、複数列の配列を返していく処理では、まだまだ REDUCE を使う必要がありそうです。



Excelの BYROW,BYCOLは変化なし

ExcelオンラインでGoogleスプレッドシートと同じような 変化(進化)があるか?を 確認してみましたが、残念ながら Excel側は 変わらずでした。

入れ子(ネスト)された配列は サポート外とエラーが返っています。

ま、Excel側で こんなアップデートがあったら、もうちょい Excelユーザー界隈が ざわざわ ってなりますよね。

しかし関数においては、またしても Excelを超えてしまいましたか・・・。

さすがGoogle先生、Excelに出来ないことを平然とやってのけるッ。

そこにシビれる!あこがれるゥ!



SCAN , MAPも同じように配列が返せるように

良い事例が見つからなかったので割愛してますが、SCAN や MAP も同様に 単一の列、または行 範囲を 対象として処理する場合、個々の処理の結果で 横1行、または縦1列の配列が返せるようになっています。

面白そうな 利用シーンがあったら、また取り上げたいと思います。



過去記事の修正しないと・・・

さて 今回水曜更新に間に合うようにと、3時間くらいで 記事を仕上げたんで、もしかすると 粗があるかもしれません。なぜか ジョジョネタも多かったような・・・。

今回のアップデートに関しては 徐々に話題になってくるんじゃないかなと思います。公式からの発表もあるかも?

過去記事の BYROW関連は、まだ 1行配列を返せない前提で書いているので、 徐々に修正加筆をしていきます。

今回の アップデートで BYROW,BYCOLが 使いやすさと機能性という点で、本当に 最強クラスの関数になってきました。

もちろん上で書いた通り、REDUCE でしか出来ないこともありますが、LAMBDA活用(学習)の第一歩は、 BYROW、BYCOL を使ってみるがベストと言えるでしょう。

また1つ 推しカン(推しの関数)が増えてしまった。。


BYROW,BYCOL の「使えそう」度アップ!


今回は 臨時ニュース的に、本来予定していた「和暦変換」を差し替えて BYROW,BYCOLのアップデートを紹介しました。

それくらい mir的には 「すんげー アップデート」で、結構テンション高めに記事を書いたんですが、世間一般の人からは「それってあなたの感想ですよね」 って言われちゃいそうなw

次回こそは、「和暦変換」ネタを書きます。(もうほぼ書いてあるんですけどペースを変えたくないんで 次週で)



■次のシリーズの記事



この記事が気に入ったらサポートをしてみませんか?