スプレッドシートで各行ごとに合計や平均を計算したいとき、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列以降は不要とします。各行の合計金額(数量×単価)を計算します。
- 結果を表示するセルを選択する
たとえばE2セルを選択します。ここにBYROW関数を入力します。 - 範囲とLAMBDAを指定する
数式バーに「=BYROW(」と入力します。第1引数には計算対象の範囲を指定します。ここではB2:C4とします。カンマで区切り、第2引数にLAMBDAを書きます。 - 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
超解決 第一編集部
疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。
Googleスプレッドシートの人気記事ランキング
- 【Googleスプレッドシート】GOOGLEFINANCE関数で株価・為替を取得!リアルタイムデータの呼び出し
- 【Googleスプレッドシート】印刷範囲を指定して印刷!特定範囲だけPDFや紙に出す手順
- 【Googleスプレッドシート】新しいスプレッドシートを作成する3つの方法!ドライブ・URL・テンプレート
- 【Googleスプレッドシート】数値の連続データを自動入力!オートフィルの活用
- 【Googleスプレッドシート】ダークモードを有効にする!目に優しい配色への切替
- 【Googleスプレッドシート】株価APIで株式データを自動取得!GOOGLEFINANCE超え活用
- 【Googleスプレッドシート】共有相手が編集できない時のチェック!権限と許可状態の確認
- 【Googleスプレッドシート】ページ設定で用紙サイズと向きを調整!印刷レイアウトの基本
- 【Googleスプレッドシート】Excelファイルxlsxをインポートする手順!ドラッグ&ドロップで取り込み
- 【Googleスプレッドシート】条件付き書式をコピーする!書式のみペーストの活用
