ADVERTISEMENT

【Googleスプレッドシート】BYROW関数で行ごとに集計!ARRAYFORMULAより読みやすい書き方

【Googleスプレッドシート】BYROW関数で行ごとに集計!ARRAYFORMULAより読みやすい書き方
🛡️ 超解決

スプレッドシートで各行ごとに合計や平均を計算したいとき、ARRAYFORMULAを使うと式が複雑になりがちです。特にIF分岐や複数関数の組み合わせが必要な場合、読みにくい数式になり、後から修正するのも大変です。そんな悩みを解決するのがBYROW関数です。BYROW関数を使えば、行ごとの処理をシンプルなLAMBDA式で記述でき、可読性が大幅に向上します。この記事ではBYROW関数の基本的な使い方から、ARRAYFORMULAとの違い、よくある注意点までを解説します。

【要点】BYROW関数を使いこなすための3つのポイント

  • =BYROW(範囲, LAMBDA(行, 計算式)) の基本構文: 範囲内の各行を1行ずつ取り出し、LAMBDA内で定義した計算を適用します。
  • LAMBDA関数との組み合わせが必須: 第2引数にLAMBDAを渡すことで、行ごとの処理内容を自由に記述できます。
  • ARRAYFORMULAより読みやすい: 複雑な分岐や複数関数を扱う場合、式が短く直感的になるため、メンテナンス性が向上します。

ADVERTISEMENT

BYROW関数が行ごとの処理を簡単にする仕組み

BYROW関数は、指定したセル範囲の各行に対して、LAMBDA関数で定義された処理を実行します。従来、行ごとの集計にはARRAYFORMULAを使うことが多かったですが、ARRAYFORMULAは配列全体に一度に演算を適用するため、条件分岐や複数関数の入れ子が増えると数式が長くなりがちです。BYROW関数では処理の単位が「行」単位であることが明確で、LAMBDA内に計算ロジックを分離できるため、数式が読みやすくなります。また、BYROW関数は自動的に各行に計算結果を返すため、ARRAYFORMULAのようにCtrl+Shift+Enterを意識する必要はありません。

BYROW関数の基本的な使い方

ここでは、売上データの各行に対して合計を計算する例を使って、BYROW関数の基本的な手順を説明します。次のようなデータがあるとします。

A列:商品名、B列:数量、C列:単価、D列以降は不要とします。各行の合計金額(数量×単価)を計算します。

  1. 結果を表示するセルを選択する
    たとえばE2セルを選択します。ここにBYROW関数を入力します。
  2. 範囲とLAMBDAを指定する
    数式バーに「=BYROW(」と入力します。第1引数には計算対象の範囲を指定します。ここではB2:C4とします。カンマで区切り、第2引数にLAMBDAを書きます。
  3. LAMBDA内で行ごとの計算を定義する
    「LAMBDA(行, INDEX(行,1)*INDEX(行,2))」と入力します。INDEX(行,1)はその行の1列目(数量)、INDEX(行,2)は2列目(単価)を表します。かっこを閉じてEnterを押します。

完成した数式は「=BYROW(B2:C4, LAMBDA(行, INDEX(行,1)*INDEX(行,2)))」となります。各行の数量×単価がE列に一発で表示されます。

SUM関数を使った行ごとの合計

たとえば、各行に複数の数値列があり、その合計を求めたい場合もBYROW関数が便利です。B2:D10の範囲で各行の合計を計算するには、次のように書きます。

「=BYROW(B2:D10, LAMBDA(行, SUM(行)))」

LAMBDA内でSUM関数をそのまま使えるため、非常にシンプルです。ARRAYFORMULAで同じことをするには「=ARRAYFORMULA(B2:B10+C2:C10+D2:D10)」と書く必要があり、列数が増えるたびに式を修正しなければなりません。

複数列の計算と条件分岐

IF関数を組み合わせた条件付き集計も、BYROW関数なら読みやすく記述できます。たとえば、数量が10以上の場合は数量×単価、それ未満は0としたい場合、次のように書きます。

「=BYROW(B2:C4, LAMBDA(行, IF(INDEX(行,1)>=10, INDEX(行,1)*INDEX(行,2), 0)))」

このように、条件が複雑でもLAMBDA内に自然に記述できます。ARRAYFORMULAで同じことを書こうとすると、IF文の中に配列を入れる必要があり、数式が長くなりやすいです。

BYROW関数を使うときの注意点とよくある失敗

空行があるとエラーになる場合

範囲内に空のセルがあると、LAMBDA内の計算がエラーになることがあります。たとえば、SUM(行)の場合、空セルは0として扱われますが、INDEXで特定の列を参照する場合は注意が必要です。空の行を除外したい場合は、QUERY関数などで事前にフィルタリングするか、IFERRORでエラー処理を追加します。

例:エラーを0で置き換える場合は「=BYROW(B2:D10, LAMBDA(行, IFERROR(SUM(行),0)))」とします。

LAMBDA内で範囲全体を参照してしまう

LAMBDAの引数「行」はあくまで1行分のデータです。そのため、行全体を指定する列範囲を直接使うことはできません。たとえば「SUM(B:B)」のような参照はできません。どうしても列全体を使いたい場合は、INDIRECT関数やOFFSET関数を使う必要がありますが、BYROWの目的から外れます。そうしたケースでは、別の関数(SUMIFなど)を検討してください。

ARRAYFORMULAとの併用は不要

BYROW関数はすでに行ごとに結果を返すため、外側にARRAYFORMULAをかける必要はありません。逆にARRAYFORMULAで包むとエラーになることがあります。BYROW単体で完結させてください。

ADVERTISEMENT

BYROW関数とARRAYFORMULAの比較

項目 BYROW関数 ARRAYFORMULA
記述の直感性 行ごとの処理が明確で、LAMBDA内にロジックを分離できるため読みやすい 配列演算を直接書くため、複数関数の入れ子になると難解になる
条件分岐の扱い IF文を自然に記述でき、複雑な条件でも管理しやすい IF文と配列の組み合わせで式が長くなりがち
列数の増減への対応 範囲を変更するだけで自動対応(LAMBDA内でSUMなどを使う場合) 列を追加するたびに数式の各項を書き換える必要がある
他の関数との組み合わせ LAMBDA内で任意の関数を使用可能 配列対応の関数のみ利用可能(一部の関数はエラーになる)

まとめ

BYROW関数を使うと、行ごとの集計処理がARRAYFORMULAより簡潔に書けます。特に複数の列を使った計算や条件分岐がある場合、LAMBDA内にロジックをまとめられるため、数式の可読性が大きく向上します。基本的な使い方としては、範囲とLAMBDAを指定するだけです。SUMやAVERAGEなどの集計関数もLAMBDA内でそのまま使えます。さらに発展的な使い方として、QUERY関数と組み合わせて動的な範囲を指定したり、独自のLAMBDA関数を定義して再利用することも可能です。ぜひBYROW関数を活用して、スプレッドシートの作業効率を高めてみてください。


ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。