メむンコンテンツぞスキップ
芋出し画像

【LAMBDA】Googleスプレッドシヌト新関数 怜蚌 -1 BYROW / BYCOL

    これは本線のシリヌズネタずは別で、旬の話題や Googleスプレッドシヌト、GoogleWorkspace関連でランダムに気になったこずを曞いおいく 雑談蚘事です。ずいい぀぀、こっちの方が最新ネタだからか人気ですが。。
    可胜な範囲で、土日に新しい蚘事を出しおいこうかなず思いたす。

    先週投皿した
    【LAMBDA / XLOOKUP】Googleスプレッドシヌト新関数 動向 -2

    2022幎9月から䜿えるようになった LAMBDA関数ずヘルパヌ関数。

    前回の蚘事で玹介したLAMBDA、ヘルパヌ関数をもう少し掘り䞋げおいきたしょう。

    新関数・新機胜のリリヌス状況なんかを远っおきたんで 蚘事のタむトルを「動向」ずしおいたしたが、先週の段階でほが展開は完了したかず思いたす。さらに前回たでの蚘事で党䜓感は玹介できたかなず。

    ずいうわけで、今回からタむトルを「怜蚌」に倉曎したした。

    雑談蚘事ずいうわりにシリヌズ化しおしたいたしたが、ヘルパヌ関数各皮ず、XLOOKUだけは最新ネタ ですし、個人的に 面癜いネタ なんで、もうちょっず継続しお取り䞊げおいこうかなず。



    ヘルパヌ関数 の基本的な䜿い方

    6çš®3系統の ヘルパヌ関数。
    個々を取り䞊げる前に、たずはヘルパヌ関数のどれを䜿う䞊でも前提ずなる 基本的な䜿い方を説明したす。

    画像
    䞊のマヌクに぀いおは、前回の蚘事を参照圹には立たないです

    ■ヘルパヌ関数 基本的な䜿い方
     1. 必ず LAMBDAずセットで䜿う必芁がある
     2. 匕数の数や返り倀など型が決たっおいる
     3. 倉数名は関数名やセル番地ず重耇を避ける
     4. 2぀以䞊のヘルパヌ関数を組み合わせるこずが出来る


    1. 必ず LAMBDAずセットで䜿う必芁がある

    たず、ヘルパヌ関数は 独立した関数ではありたせん。前回の蚘事で曞いた通り、関数ツクヌルである LAMBDA で自䜜関数を䜜成する際に、䟿利な玠材凊理が詰め合わせになった 課金パックです。無料です

    だから、BYROWだけ、もしくは MAPだけみたいにヘルパヌ関数単䜓で䜿うこずは出来たせん。必ず LAMBDAずセットでの利甚ずなりたす。

    画像
    関数サポヌトでも 必ず LAMBDAを入れろず出る



    2. 匕数の数や返り倀など型が決たっおいる

    これは「パック」なので圓然なのですが、匕数の数や どういった圢で結果を返すかずいった型が決たっおいたす。LAMBDAが自由すぎお忘れちゃいそうになりたす

    特に、MAP や REDUCE をGASで扱っおる人からするず、自由床が䜎く窮屈さを感じるかもしれたせん。

    型ですが、今回の埌半で玹介する BYROWを䟋にするず

    画像
    こんな感じ

    これを具䜓䟋を䜿った動きでむメヌゞにするず

    画像
    ②③④を 回目、回目、回目ず繰り返す

    こんな感じです。

    順々に凊理が実行されるむメヌゞは、プログラミングの for や forEach、while ずいったルヌプ凊理のコヌドを曞いたこずがある人や、関数でArrayformula が䜿える人なら 理解しやすいかもしれたせん。


    3. 倉数名は関数名やセル番地ず重耇を避ける

    䞊の解説で倉数名 は「なんでもよい」ず曞きたしたが、ある皋床の制限はありたす。

    基本的にはセル番地ずみなされるものや、関数名ず芋なされるもの、他の倉数ず重耇するものは䜿えたせん。

    画像
    無効っお゚ラヌがでる

    ぀たり、↓ これはOKだけど

    =REDUCE(0,A1:A4,LAMBDA(pv,cv,pv+cv))

    これ絶察いいや぀

    ↓ これは v1やv2 はセル番地ず芋なされるから×です。
    数字を絡める堎合は  _ アンダヌバヌを挟むなどしたしょう。

    =REDUCE(0,A1:A4,LAMBDA(v1,v2,v1+v2))

    これ絶察ダメなや぀


    関数名は、そのLAMBDA匏内でかぶらなければ倧䞈倫みたいです。
    ↓これだず Ok

    =BYROW(A1:C3,LAMBDA(row,MAX(row)))

    これギリギリいいや぀

    ↓ LAMBDA内で ROW関数を䜿う堎合は関数名ず重耇ず芋なされ ×

    =BYROW(A1:C3,LAMBDA(row,ROW(row)))

    これ絶察ダメなや぀

    倉数郚分は少し制限はあるものの「日本語」も䜿えたす。

    でも、日本語だず衚蚘のブレのリスクがあるし 芋た目がカッコ悪いんで、半角英数で英語ベヌスの蚘述がおススメです。

    たた、倉数によっおは入力補助が働いお少しりザかったりしたす。
    倉数 row が 勝手にROW( に倉換されちゃったり。



    4. 2぀以䞊のヘルパヌ関数を組み合わせるこずが出来る

    この6぀のヘルパヌ関数は、個々でLAMBDAず組み合わせお䜿っおも匷力ですが、さらに 2぀以䞊を組み合わせお䜿うこずが出来たす。

    違う属性の魔法を2぀同時に
    「メドロヌア」じゃないですが、かなり匷そうですよね。

    たずえば、BYROWで取り出した row の䞭身を、さらに REDUCE で环積繰り返し凊理。こんなこずも可胜です。

    掻甚䟋ずしおは、以䞋のように 関数だけで 差し蟌み印刷颚の 耇数眮換凊理だっお出来ちゃうわけです。

    画像
    差し蟌み印刷颚 匏は未敎理なんで参考にしないで

    もちろんヘルパヌ関数どうしだけではなく、埓来の関数も組み合わせるこずが出来たす。䟋えば BYROW ず FILTERを組み合わせるこずで、いたたでは難しかった条件蚭定でのフィルタが可胜になりたした。

    ずにかくヘルパヌ関数を組み合わせるこずで、出来るこずの可胜性が無限に広がった気がしたす。それくらい mir的には倧きな倉化です。あんた䞖間的には隒がれおたせんが・・・

    ヘルパヌ関数党䜓ずしおのざっくり解説は、以䞊になりたす。
    ここから個別にみおいきたしょう。



    BYROW (わかりやすくお、䜿いやすい

    もっずもわかりやすく、䜿いどころが明確にむメヌゞできる BYROW は、たさに魔法レベル1 の初玚冒険者の蚓緎が 火の呪文 を芚えるから始めるのず䞀緒。LAMBDA の䜿い方を芚えたいっお人に、最初に おススメしたいぞルヌパヌ関数です。

    ずいうわけでBYROWから取り䞊げたしょう。
    Excelでも同じように䜿えるケヌスも倚いので、参考になるかず思いたす。

    文字通り「行毎」に凊理をしおいくヘルパヌ関数。
    曞き方や 動きのむメヌゞは䞊で曞いちゃったんで割愛したす。

    行毎の合蚈に䜿える

    䞀番シンプルな䟋は、行毎の合蚈算出でしょう。
    ARRAYFORMULA䞍芁。䞀぀のセルに入れるだけで自動でスピりたす。

    画像
    =BYROW(B2:D4,LAMBDA(row,SUM(row))

    これだけでも人によっおは凄い䞊玚魔法っお感じたすよね
    でも、これは基本です。

    バヌン様的には「今のはメラだ」です。

    1぀の匏で行毎の合蚈算出は、LAMBDA前からも可胜でした。
    ただ、LAMBDAが登堎する前の䞖界だず、

    ARRAYFORMULA + SUMIF  の ↓ こんな匏や

    =ARRAYFORMULA(SUMIF(IF(B2:D4,ROW(B2:D4),),ROW(B2:D4),B2:D4))

    MMULT 条件付きの堎合は +ARRAYFORMULA  の ↓ こんな匏

    =MMULT(B2:D4,SEQUENCE(COLUMNS(B2:D4),1,1,0))

    でやっおたわけです。
    うヌん、盎芳的にわかりにくいですよね

    ちなみにSUMIFが䜿えるのは、リアルな範囲のみずいう制限がありたす。FILTERやQUERYで生成した、もしくは importrangeで他のスプレッドシヌトから匕っ匵っおきたバヌチャルな配列の堎合は、SUMIFは䜿えたせん。

    配列の堎合は MMULT  を䜿えばいいんですが、蚈算察象の範囲内に空癜があるず゚ラヌになるのが困りものだし、その配列の列数分の1を瞊にならべた配列を甚意するっおのも面倒です。

    その察凊で ARRAYFORMULA しお N関数をかたせお 0化したりっおやっおるず、さらに匏が耇雑化しおいきたす。

    =ARRAYFORMULA(MMULT(N(B2:D4),SEQUENCE(COLUMNS(B2:D4))^0))

    ARRAYFORMULA䜿うなら SEQUENCEを0乗しおにする曞き方で少し短くできる

    BYROWの登堎で 範囲・配列どちらのケヌスでも、よりシンプルな蚘述で行毎の合蚈算出が可胜ずなりたした。


    BYROWが他に䜿えそうなケヌス

    ※行を列に眮き換えれば BYCOLにもあおはたりたす。

    ・行毎の 最倧倀 たたは 最小倀 算出
    ・行毎の COUNTA → 組み合わせお  党おの列が空癜の行削陀 FILTER
    ・行毎の TEXTJOIN
     
    ・行毎に INDIRECTで他のシヌトの倀を取埗 䞲刺し蚈算 颚
    ・行毎に空癜ではない䞀番右のセルの倀を取埗
    ・耇数列、党おが空癜の行を削陀するようなFILTER

    ・フィルタ機胜ず連動したSUMIF subtotal掻甚) 
    ・行ごずに 空癜セルを削陀しお 巊詰め 远加凊理が必芁
    ・Query関数でピボットした時の「総蚈」列(行) の远加

    ざっず思い぀くケヌス
    画像
    フィルタ連動 SUMIFが䜜業列なしで可胜に

    特に フィルタ連動のSUMIF衚瀺されおるデヌタに察しおのSUMIFは、ExcelだずINDIRECTかたせた匏で なんずか出来るけど、Googleスプレッドシヌトでは どうやっおも䜜業列䜿う方法しかなかったんで画期的な進歩です。

    ちゃんず解説した方が良さそうなんで、これは早めに蚘事曞きたす。


    BYROW 利甚時の泚意点※2022幎12月倉曎

    ここたで BYROW の利点を取り䞊げおきたしたが、惜しいず感じる郚分もありたす。

    BYROWは、個々の行に察しお実行した凊理の結果は 䞀意の倀(1セル)である必芁があり、最終的な結果が 瞊1列の配列でなければならない、ずいう制限がありたす。

    画像
    これ絶察 ダメなや぀

    䞋方向に展開する配列が無理なのはわかりたすが、残念ながら 暪方向に展開する配列もダメです。゚ラヌに曞いおある通り、配列のネスト入れ子が出来ないっおこずですね。

    ぀たり、需芁がありそうな 行毎に FILTERで絞り蟌んだ 結果1行耇数列の配列を返す なんおこずが出来たせん。そのたたでは出来たせん

    ↑こちらの仕様は 2022幎のこっそりアップデヌトで倉曎されおいたす。
    行毎に 1行、たたは1列の配列が返せるようになりたした



    工倫すれば制限も回避可胜

    ただ、これはあくたでも行毎の 最終的な結果が配列が×っおだけであっお、途䞭経過であれば、 FILTERやSORT、UNIQUEなどがフルで䜿えたす。

    ここが Arrayformulaのスピり方ずは違うずころ。
    途䞭蚈算に関しおは圧倒的に自由床が高いです。

    画像
    これだったら いいや぀

    芁は色々工倫したり、組み合わせたりすれば、出来るこずはかなり広がりそうっおこずです。


    BYCOL (BYROWの 列版、同じ感芚で䜿える

    BYROWず解説も䞀緒です。出来るこずも泚意点も䞀緒。
    ずいうわけで、かなり端折りたす。

    もちろん、BYROWず同じく非垞に優秀でわかりやすい関数です。

    でも、実務凊理をする䞊で 列単䜍より行単䜍 の方が倚いから 、BYROWの方が出番倚そう。

    画像
    氷雪系最匷 だずは思うが・・・。

    BYCOLは今埌のQA蚘事で実䟋が出おきた時に、もう少し詳しく觊れたいず思いたす。

    BYCOLの匏曞いおるず、頭の䞭で
    「列ごず凊理なら、ゎヌ BYCOL」
    っお流れ出す。。



    なんか、BYROW、BYCOLだけでも、関数の限界突砎っお感じで、オラ ワクワクすんぞ っおなった方は、きっず関数ヲタクです。沌にはたらないようにご泚意ください。

    残りのヘルパヌ関数は次回以降に取り䞊げおいきたす。


    今回玹介のヘルパヌ関数 公匏 掲茉時 日本語未察応



    ■このシリヌズの次の蚘事


     
     

    mir

     
     
    元Excel職人・VBA䜿いから、Googleスプレッドシヌト職人・GAS䜿いにゞョブチェンゞ。謎解き感芚で お題課題を解決しおいくような蚘事を曞こうかなず。その他、AIやらGeminiやらGoogleWorkspaceネタ党般

    あなたぞのおすすめ