【復活】Googleスプレッドシート 11新輸入関数 最新動向-3 【WRAPROWS / VSTACK】
3月に入ったら思った以上に 仕事が忙しくなってしまい、
さらに
コロナ規制緩和で飲み会的なものが増えた
今年は花粉の量がすさまじく体力がかなり削られてる
こんな理由もあって、平日更新がままなりません。
当面は 週2更新 → 休日の 週1更新 とさせていただきます。
書きたいことはいっぱいあるんですけどね・・・。すいません。
余裕があれば 不定期で 平日更新入れます。
本題とそれますが、今週ざわついたのは Googleドライブ、スプレッドシート、ドキュメント、スライドのメニューバー等のデザイン変更でしょうか。
見た目や操作性の変更なので、こちらで大きく取り上げる予定はありませんが、情報がない中での急な変更だったので、知恵袋では「どうしたら戻せますか?」的な質問を幾つか見かけました。
結論としては、強制変更なので 戻せません!(それが Google流)
Googleスプレッドシートをどんどん活用して、早く新しいデザインに慣れていくしかないです。
シリーズ前回の記事
Excelから 輸入された 配列操作系関数
全部で8つですが、基本的には対になる2つの関数セットが4つとなります。
TOROW / TOCOL (前回紹介)
CHOOSEROWS / CHOOSECOLS (前回紹介)
WRAPROWS / WRAPCOLS
VSTACK / HSTACK
前回の続きで 今回は Googleスプレッドシートで使えるようになった、
WRAPROWS / WRAPCOLS
VSTACK / HSTACK
の 4つの新関数を見ていきましょう。
Googleスプレッドシート 11の新関数-7,8 WRAPROWS / WRAPCOLS
WRAPROWS / WRAPCOLS は、1行または1列のデータを 指定した数で折り返した配列を生成する、まさに配列操作関数です。
一次元配列を二次元配列にする関数と言えるかもしれません。
対象とする範囲(配列)は1行または1列である必要があります。
このように 複数行・複数列の範囲に対して 使うとエラーになります。
じゃあ、上のような5セルごとに下に折り返す範囲を3セル毎に折り返すように変形したい場合はどうすればよいか?
前回登場したアレが使えます。
TOROW/ TOCOL と WRAPROWS / WRAPCOLSを組み合わせる
WRAPROWS / WRAPCOLS が 一次元から二次元に配列を変換する関数としたら、反対に 二次元から一次元に配列を変換する関数が TOROW / TOCOL です。(もちろん 昔ながらのFLATTEN でもよいですが)
一度 TOROWで 1行データにしてから 3セル折り返しに変換しています。
ちなみに、なんで TOROW側で 第2引数を 3として 空白エラー削除をしたうえで、WRAPROWS側で ,) として埋め文字を空にしているか?
このまま 空白削除なしで TOROWして WRAPROWSすると、最後の4セル分の空白を折り返すさいに、左のようになり 1行無駄が発生してしまうからです。
別に気にしなくても良いのですが、この右側の式で出力された方の赤線の空白セルは、あくまでも関数で出力されている空白です。
だから、ここに何か入力すると スピルを邪魔することになり、式全体がエラーとなってしまいます。
そういった誤操作を防ぐため、不要な出力を削除しています。
WRAPROWS / WRAPCOLS 実践活用例
さて、この WRAPROWS / WRAPCOLS に該当する関数は Googleスプレッドシートにこれまで存在しなかったので、代わりに 他の関数の組み合わせ(XLOOKUP + Arrayformula、もしくは MAP + INDEX)で処理をしていました。
その辺りに代替処理は、Excel側の WRAPROWS / WRAPCOLS 検証で書いています。(この時は Googleスプレッドシートに こんなに早く輸入されるとは思わなかったんでw)
さて、これを使って ある処理を実現した 例を書いた noteがありました。
そう、1~25までの数字をランダムに 5x5 に並べたビンゴカード生成です。
簡易例の方の式ですが、この時はまだ GoogleスプレッドシートにWRAPROWSがないので
こんな式をつかってましたが、WRAPROWSが使える今や
これで出来ちゃいます。
もしビンゴでよくある 真ん中をFreeという文字にしたい場合は、SEQUENCE(5,5)という同じサイズの配列を用意して MAP関数で処理するのが良いです。
せっかくWRAPROWSでシンプルになったのに、また煩雑な式になっちゃいましたね。
この他、年間カレンダーのケースでも使えそうですが、それは次の機会に書きたいと思います。
Googleスプレッドシート 11の新関数-9,10 VSTACK / HSTACK
VSTACK / HSTACK は配列を結合する関数です。
VSTACK は縦方向(下)に引数の並び順に範囲を結合、HSTACK は横方向(右)に引数の並び順に範囲を結合します。
従来の 中カッコ {} コロン、カンマ による配列結合との違い
これも Excel新関数シリーズの VSTACK / HSTACKの記事で触れているので重複しますが、Googleスプレッドシートにはもともと 配列結合の記述方法が存在します。
こっちの方が記述が短い(シンプル)なんですが、VSTACK / HSTACK を使う時と一点だけ違いがあります。
それは、結合面のサイズが違う配列同士を結合する際の挙動の違いです。
={A1:D2;G1:J4}
と 縦結合した場合は 、結合面は 2つの配列の横の長さ(幅)です。これはどちらも 4セル分で同じなので 問題なく結合できます。
一方 ={A1:D2,G1:J4}
このように 横結合した場合、結合面は 配列の縦の長さ(高さ)なんですが、A1:D2 が2 に対して G1:J4は 4 とズレがあります。
この場合、={A1:D2,G1:J4} は全体がエラーとなり結果が得られません。
一方、VSTACK / HSTACK を使った場合は 不足部分のみエラーとなるだけで 配列の結合面サイズが違っていても結合が出来ます。
ここが大きな違いです。
エラーを解消(空白)としたい場合は、
このように IFERRORでくくるだけです。
残念ながら VSTSAK / HSTACK はWRAPROWS / WRAPCOLS のような 「埋める文字」の引数を持たないので、IFERROR関数を組み合わせる必要があります。
IFERRORはちゃんとに書くなら =IFERROR(HSTACK(A1:D2,G1:J4),"") こんな感じになりますが、エラーなら空白とするケースでは 省略記述ができます。
それにしても、前から IFERRORって 配列処理できましたっけ? Arrayformulaいらずで 処理できるのはシンプルでいいですね。
その他の VSTACK / HSTACK の活用や 細かい説明は Excel 14の新関数シリーズの記事を参照ください。
もちろん Excel の VSTACK / HSTACK の神ってる機能 複数シートの串刺しVSTACK(3D HSTACK)は Googleスプレッドシートは使えません。残念!
とはいえ、このサイズの違う配列を結合する機会ってのが、あまり思いつかなかったりします。
行毎に空白左詰めなんて処理も Excelだったら REDUCEでFILTER後のサイズの違う配列を VSTACKする処理を REDUCEで繰り返して結果配列を生成なんてケースがありますが、Googleスプレッドシートは LAMBDAヘルパー関数が 配列ネストをサポートできるようになったんで不要なんですよね。。
VSTSAK / HSTACK の サイズが違う配列の結合を応用する
あまりケースがないと書いた サイズが違う配列の結合ですが、発想を変えてみましょう。
たとえば 結合する際に切れ目がわかるように、1行(1列)あけたい。といったケース。
これは データとしてはよろしくないですが、見せる資料として需要があるとは思います。
これを中カッコでの結合でやろうとすると 空が 4つ横並びの配列を用意する必要があって、結構面倒だったんですよね。
空配列を生成する方法は いくつかあります。
上の空配列を生成してから { ; } で連結よりも、
これだけで1列 空け連結が出来るのは、とっても簡単ですね。
他にも取得したデータの左に1列追加して 表の名前やシート名を差し込んでから結合といった
こんな処理もぐっと簡単に実現できるようになりました。
Googleスプレッドシート の 新配列操作系関数はカレンダー処理でいきる!
今回は Googleスプレッドシートに Excelから輸入された新配列操作系関数の
WRAPROWS
WRAPCOLS
VSTACK
HSTACK
の4つを検証しました。
先週の4つと合わせて8つの関数の検証終了です。
そして今回の新関数シリーズ 残り1つ LET関数、これがあることで この8つの配列操作系関数がよりいきてきます。
逆にLETなしだと 同じ記述の繰り返しが何度も出てくる長い式になってしまいます。
そしてこの LET関数 + 配列操作系関数 がもっとも活きる事例の一つが、カレンダー関連の操作です。次回、LET関数の検証と合わせて 具体的事例を紹介していきましょう!
この記事が気に入ったらサポートをしてみませんか?