メインコンテンツへスキップ
見出し画像

【QuickTips 02】行数0の空配列を使ってGoogleスプレッドシートのREDUCE + VSTACKの初期値どうする問題を解決

    題材を1テーマに絞った 、シンプルでちょっと便利な Quick Tipsです。マガジンにまとめていきます。

    今回は REDUCE関数なんで難易度やや高めです。



    REDUCE関数でVSTACKやHSTACKを繰り返す

    LAMBDAヘルパー関数最強のREDUCE関数。この活用例の一つが、VSTACKやHSTACKの連結ループ処理です。

    画像

    =REDUCE( ,SEQUENCE(10), LAMBDA(pv,cv,IFNA(VSTACK(pv,SEQUENCE(1,cv)))))

    👆はわかりやすい例としてREDUCEを使っていますが、GoogleスプレッドシートはExcelと違って MAPやBYROWが中で配列を返すことが出来るので、一次元配列の連結ならREDUCE関数を使う必要はありません。

    画像
    MAPでも可

    配列ネストが使えない Excelは、REDUCE + VSTACK(HSTACK)に頼るケースが多いです。



    REDUCE + VSTACK の 初期値どうする問題

    この処理で問題になるのが 「REDUCEの初期値をどうするか?」 

    画像
    1行目が空の列になってしまう

    JSのreduceのように 初期値の省略が出来ません。

    REDUCEの第1引数 初期値は、 空や空文字とすることが多いんですが

    積み上げループをすると、初期値が無駄な行として残ってしまうんです。

    Excelなら最後にDROP関数で余計な1行(1列)を落とす方法が一般的です。

    画像

    =DROP(REDUCE("",SEQUENCE(10),LAMBDA(pv,cv,IFNA(VSTACK(pv,SEQUENCE(1,cv)),""))),1)

    Excelでは、

    REDUCEでVSTACKをループして最後にDROP 

    は一つの型と言えるでしょう。

    しかし残念ながらTAKE関数、DROP関数は 2025年7月 現在、Googleスプレッドシートには輸入されておらず、この方法が使えません。

    その為LAMBDA関数内でIFで分岐させ、1回目の処理だけスタックしない等の工夫が必要でした。



    TOCOL(,1) を使った 空配列 が使える!

    この問題をさくっと解決するTipsが、初期値を TOCOL(,1) とする方法です。

    海外のQAサイトでよく見かけるテクニックで、TOCOL(æ,2) としている回答者もいます。

    TOCOL関数の第2引数 1指定は空白無視なので、第1引数が空白だと #REF !エラーを返します。

    画像

    しかし実はこれ 高さ(行数)0、幅(列数)1の空配列で、これを VSTACKで他の配列と連結すると

    画像

    TOCOL(,1)が消える という特性があります。

    つまり、TOCOL(,1)をREDUCE関数の初期値に使えば、

    画像

    VSTACKした時の余計な最初の1行を防げるんです!



    利用の注意点

    1.組み合わせに注意

    画像

    TOCO(,1)は完全な空ではありません。横幅1があります。だからHSTACKと組み合わせてもうまくいきません。

    同様にTOROW(,1)も 高さ1なので、VSTACKとの組み合わせは✖です。

    VSTACK なら TOCOL(,1)
    HSTACK なら TOROW(,1)

    組み合わせの相性(向き)に注意しましょう。


    2.中カッコの結合では使えない

    画像

    中カッコ{ }と組み合わせても✖です。VSTACK、HSTACKとの組み合わせるテクニックです。※一次元配列なら可能


    3.Excelでは使えない

    画像

    Excelだと #VALUE !エラーとなります。この方法は使えません。



    実践例 & 関連 note

    実務での活用例。👇コメント欄にお邪魔しました。


    今回のTipsに関連するnoteは以下を参照。 👇


     
     

    mir

     
     
    元Excel職人・VBA使いから、Googleスプレッドシート職人・GAS使いにジョブチェンジ。謎解き感覚で お題(課題)を解決していくような記事を書こうかなと。その他、AIやらGeminiやらGoogleWorkspaceネタ全般

    あなたへのおすすめ