![見出し画像](https://assets.st-note.com/production/uploads/images/100541009/rectangle_large_type_2_b06de8c5a956cf865e0bfcdd4f231f5e.png?width=1200)
【復活】Googleスプレッドシート 11新輸入関数 最新動向-3 【WRAPROWS / VSTACK】
3月に入ったら思った以上に 仕事が忙しくなってしまい、
さらに
コロナ規制緩和で飲み会的なものが増えた
今年は花粉の量がすさまじく体力がかなり削られてる
こんな理由もあって、平日更新がままなりません。
当面は 週2更新 → 休日の 週1更新 とさせていただきます。
書きたいことはいっぱいあるんですけどね・・・。すいません。
余裕があれば 不定期で 平日更新入れます。
本題とそれますが、今週ざわついたのは Googleドライブ、スプレッドシート、ドキュメント、スライドのメニューバー等のデザイン変更でしょうか。
![](https://assets.st-note.com/img/1679100727203-d5IiIHBDVn.png?width=1200)
見た目や操作性の変更なので、こちらで大きく取り上げる予定はありませんが、情報がない中での急な変更だったので、知恵袋では「どうしたら戻せますか?」的な質問を幾つか見かけました。
結論としては、強制変更なので 戻せません!(それが 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
![](https://assets.st-note.com/img/1679101935028-AA4oj2LkZ1.png?width=1200)
WRAPROWS(範囲, 折り返しの値, [代替文字])
WRAPCOLS(範囲, 折り返しの値, [代替文字])
範囲・・・ 対象の範囲・配列(1行または1列のデータ)
折り返しの値・・・何セル毎に折り返すか
[代替文字]・・・ 最後余ったセルを埋める文字(設定なしは #N/A)
WRAPROWSは 横方向(左から右)に値を並べ下に折り返す
WRAPCOLSは 縦方向(上から下)に値を並べ右に折り返す
WRAPROWS / WRAPCOLS は、1行または1列のデータを 指定した数で折り返した配列を生成する、まさに配列操作関数です。
一次元配列を二次元配列にする関数と言えるかもしれません。
![](https://assets.st-note.com/img/1679128217615-xNU87LaVda.png?width=1200)
対象とする範囲(配列)は1行または1列である必要があります。
![](https://assets.st-note.com/img/1679128362627-TcFV5bnt6O.png?width=1200)
このように 複数行・複数列の範囲に対して 使うとエラーになります。
じゃあ、上のような5セルごとに下に折り返す範囲を3セル毎に折り返すように変形したい場合はどうすればよいか?
前回登場したアレが使えます。
TOROW/ TOCOL と WRAPROWS / WRAPCOLSを組み合わせる
![](https://assets.st-note.com/img/1679128881484-ZPFC73Elbn.png?width=1200)
WRAPROWS / WRAPCOLS が 一次元から二次元に配列を変換する関数としたら、反対に 二次元から一次元に配列を変換する関数が TOROW / TOCOL です。(もちろん 昔ながらのFLATTEN でもよいですが)
一度 TOROWで 1行データにしてから 3セル折り返しに変換しています。
=WRAPROWS(TOROW(A1:E6,3),3,)
ちなみに、なんで TOROW側で 第2引数を 3として 空白エラー削除をしたうえで、WRAPROWS側で ,) として埋め文字を空にしているか?
![](https://assets.st-note.com/img/1679129200038-qnw42od4Kf.png)
このまま 空白削除なしで TOROWして WRAPROWSすると、最後の4セル分の空白を折り返すさいに、左のようになり 1行無駄が発生してしまうからです。
別に気にしなくても良いのですが、この右側の式で出力された方の赤線の空白セルは、あくまでも関数で出力されている空白です。
だから、ここに何か入力すると スピルを邪魔することになり、式全体がエラーとなってしまいます。
そういった誤操作を防ぐため、不要な出力を削除しています。
WRAPROWS / WRAPCOLS 実践活用例
さて、この WRAPROWS / WRAPCOLS に該当する関数は Googleスプレッドシートにこれまで存在しなかったので、代わりに 他の関数の組み合わせ(XLOOKUP + Arrayformula、もしくは MAP + INDEX)で処理をしていました。
その辺りに代替処理は、Excel側の WRAPROWS / WRAPCOLS 検証で書いています。(この時は Googleスプレッドシートに こんなに早く輸入されるとは思わなかったんでw)
さて、これを使って ある処理を実現した 例を書いた noteがありました。
そう、1~25までの数字をランダムに 5x5 に並べたビンゴカード生成です。
簡易例の方の式ですが、この時はまだ GoogleスプレッドシートにWRAPROWSがないので
=ARRAYFORMULA(XLOOKUP(SEQUENCE(5,5),SEQUENCE(25),SORT(SEQUENCE(25),RANDARRAY(25),true)))
こんな式をつかってましたが、WRAPROWSが使える今や
=WRAPROWS(SORT(SEQUENCE(25),RANDARRAY(25),true),5)
これで出来ちゃいます。
![](https://assets.st-note.com/img/1679130745414-BiHxw1IQjy.png?width=1200)
もしビンゴでよくある 真ん中をFreeという文字にしたい場合は、SEQUENCE(5,5)という同じサイズの配列を用意して MAP関数で処理するのが良いです。
![](https://assets.st-note.com/img/1679131133978-1wFiLnKOOC.png?width=1200)
=MAP(SEQUENCE(5,5),WRAPROWS(SORT(SEQUENCE(25),RANDARRAY(25),true),5),LAMBDA(v_1,v_2,if(v_1=13,"Free",v_2)))
せっかくWRAPROWSでシンプルになったのに、また煩雑な式になっちゃいましたね。
この他、年間カレンダーのケースでも使えそうですが、それは次の機会に書きたいと思います。
Googleスプレッドシート 11の新関数-9,10 VSTACK / HSTACK
![](https://assets.st-note.com/img/1679184176637-ZZtSxruTlt.png?width=1200)
VSTACK(範囲 1, [範囲 2, ...]) 複数の範囲を縦方向(下)に順番に結合
HSTACK(範囲 1, [範囲 2, ...]) 複数の範囲を横方向(右)に順番に結合
範囲 1・・・ 最初に結合する範囲。
範囲 2, ... ・・・(省略可)範囲 1 に結合する範囲。
結合面のサイズが違う際、余る部分のセルは #N/A 表示となる
VSTACK / HSTACK は配列を結合する関数です。
VSTACK は縦方向(下)に引数の並び順に範囲を結合、HSTACK は横方向(右)に引数の並び順に範囲を結合します。
従来の 中カッコ {} コロン、カンマ による配列結合との違い
これも Excel新関数シリーズの VSTACK / HSTACKの記事で触れているので重複しますが、Googleスプレッドシートにはもともと 配列結合の記述方法が存在します。
{範囲1;範囲2;….} ;(セミコロン) で連結で 範囲を縦方向(下)に順番に結合
{範囲1,範囲2,….} , (カンマ) で連結で 範囲を横方向(右)に順番に結合
こっちの方が記述が短い(シンプル)なんですが、VSTACK / HSTACK を使う時と一点だけ違いがあります。
それは、結合面のサイズが違う配列同士を結合する際の挙動の違いです。
![](https://assets.st-note.com/img/1679185933086-aPRd5MAW2o.png?width=1200)
={A1:D2;G1:J4}
と 縦結合した場合は 、結合面は 2つの配列の横の長さ(幅)です。これはどちらも 4セル分で同じなので 問題なく結合できます。
一方 ={A1:D2,G1:J4}
このように 横結合した場合、結合面は 配列の縦の長さ(高さ)なんですが、A1:D2 が2 に対して G1:J4は 4 とズレがあります。
この場合、={A1:D2,G1:J4} は全体がエラーとなり結果が得られません。
![](https://assets.st-note.com/img/1679186585860-gZQBRIia3F.png?width=1200)
一方、VSTACK / HSTACK を使った場合は 不足部分のみエラーとなるだけで 配列の結合面サイズが違っていても結合が出来ます。
ここが大きな違いです。
エラーを解消(空白)としたい場合は、
=IFERROR(HSTACK(A1:D2,G1:J4))
このように 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 の サイズが違う配列の結合を応用する
あまりケースがないと書いた サイズが違う配列の結合ですが、発想を変えてみましょう。
![](https://assets.st-note.com/img/1679191822889-fK4nYyCDHo.png?width=1200)
たとえば 結合する際に切れ目がわかるように、1行(1列)あけたい。といったケース。
これは データとしてはよろしくないですが、見せる資料として需要があるとは思います。
これを中カッコでの結合でやろうとすると 空が 4つ横並びの配列を用意する必要があって、結構面倒だったんですよね。
空配列を生成する方法は いくつかあります。
{"","","",""}
手作業で4つの空の配列を作成。(簡単だがこれは 可変にできない)
SPLIT(REPT(",",COLUMNS(A1:D2)-1),",",,false)
,をREPTで空セル-1分生成してSPLIT(空白除去なし)
arrayformula(IF(SEQUENCE(1,COLUMNS(A1:D2))>0,))
SEQUENCEで横に1,2,34 を生成 ArrayformulaとIFで空白に置き換え
MAKEARRAY(1,COLUMNS(A1:D2),LAMBDA(r,c,))
MAKEARRAYで1行4列の空配列を生成
CHOOSECOLS("",SEQUENCE(1,COLUMNS(A1:D2),1,0))
空文字をCHOOSECOLSで4回 1列目を取り出すことで 生成
上の空配列を生成してから { ; } で連結よりも、
=IFERROR(VSTACK(A1:D2,,G1:J4))
これだけで1列 空け連結が出来るのは、とっても簡単ですね。
他にも取得したデータの左に1列追加して 表の名前やシート名を差し込んでから結合といった
![](https://assets.st-note.com/img/1679194375672-Zu1mtCarxk.png?width=1200)
=VSTACK(IFERROR(HSTACK(A1,A2:D3),A1),IFERROR(HSTACK(G1,G2:J5),G1))
こんな処理もぐっと簡単に実現できるようになりました。
Googleスプレッドシート の 新配列操作系関数はカレンダー処理でいきる!
今回は Googleスプレッドシートに Excelから輸入された新配列操作系関数の
WRAPROWS
WRAPCOLS
VSTACK
HSTACK
の4つを検証しました。
先週の4つと合わせて8つの関数の検証終了です。
そして今回の新関数シリーズ 残り1つ LET関数、これがあることで この8つの配列操作系関数がよりいきてきます。
逆にLETなしだと 同じ記述の繰り返しが何度も出てくる長い式になってしまいます。
そしてこの LET関数 + 配列操作系関数 がもっとも活きる事例の一つが、カレンダー関連の操作です。次回、LET関数の検証と合わせて 具体的事例を紹介していきましょう!
この記事が気に入ったらサポートをしてみませんか?