スプレッドシートで「行ごとの合計」や「行ごとの平均」を出したいときに困りますよね。行の数だけSUM関数やAVERAGE関数を並べるのは手間ですし、行が増えるたびに数式をコピーするのも面倒です。
BYROW関数を使えば、すべての行に同じ計算を一括で適用できます。LAMBDA関数と組み合わせて「各行にこの処理をして」と指定するだけです。
この記事では、BYROW関数の基本から、BYCOL関数やMAP関数との違いまでわかりやすく解説します。
BYROW関数とは?
BYROW関数(読み方: バイロウ関数)は、配列やセル範囲の各行に対してLAMBDA関数を適用する関数です。結果は縦1列に返ります。「by row(行ごとに)」が名前の由来で、行単位で処理を繰り返すイメージですね。
たとえば、4行x3列の売上データにBYROW関数でSUM処理を適用すると、4行それぞれの合計が縦1列に並びます。行を追加しても数式を変更する必要がなく、自動で集計範囲が広がりますよ。
BYROW関数にできることをまとめると、次のとおりです。
- 各行に同じ計算(合計・平均・最大値など)を一括で適用する
- LAMBDA関数で処理内容を自由にカスタマイズできる
- 結果を縦1列で返すため、集計列として使いやすい
NOTE
BYROW関数はGoogleスプレッドシート独自の関数です。Excelには同じ名前の関数がないため、Excelで同様の処理をしたい場合は、各行にSUM関数やAVERAGE関数を個別に入力してください。
BYROW関数の基本構文
=BYROW(配列, LAMBDA(行, 処理))
カッコの中に、処理対象の配列と、各行に適用するLAMBDA関数を指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 配列 | 必須 | 処理対象のセル範囲または配列 |
| LAMBDA(行, 処理) | 必須 | 各行に適用する関数。「行」は各行を受け取る仮引数 |
LAMBDA関数の仮引数(上の例では「行」)には好きな名前を付けられます。rowやrでもOKです。この仮引数に各行のデータが1行ずつ渡されて、処理が実行されます。
LAMBDA関数のおさらい
BYROW関数を使うには、LAMBDA関数の基本を知っておく必要があります。LAMBDA関数の詳しい仕組みはBYCOL関数の記事で解説していますので、ここではポイントだけ押さえましょう。
LAMBDA関数は「自分だけの関数を作れる」関数です。引数と処理内容を自分で定義できます。
=LAMBDA(引数, 処理)(値)
たとえば =LAMBDA(x, x2)(5) と書くと、xに5が入って「52=10」が返ります。BYROW関数の中では、このLAMBDA関数に各行のデータが自動的に渡される仕組みです。
BYROW関数の基本的な使い方
ここでは、担当者別の売上データをBYROW関数で行ごとに集計する例を紹介します。
サンプルデータ
A1:D4に以下のデータが入っているとします。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 4月 | 5月 | 6月 | |
| 2 | 東京 | 100 | 120 | 110 |
| 3 | 大阪 | 80 | 90 | 85 |
| 4 | 名古屋 | 60 | 70 | 65 |
各行の合計を一括で求める
B2:D4の数値部分に対して、行ごとの合計を求めます。出力先のセル(たとえばE2)に以下の数式を入力して、Enterを押します。
=BYROW(B2:D4, LAMBDA(row, SUM(row)))
結果が縦1列に展開されます。
| E | |
|---|---|
| 2 | 330 |
| 3 | 255 |
| 4 | 195 |
東京の合計は330、大阪は255、名古屋は195です。3行分の合計が一度に求まりましたね。
各行の平均を一括で求める
SUM関数の部分をAVERAGE関数に変えるだけで、行ごとの平均が出せます。
=BYROW(B2:D4, LAMBDA(row, AVERAGE(row)))
| E | |
|---|---|
| 2 | 110 |
| 3 | 85 |
| 4 | 65 |
LAMBDA関数の処理部分を入れ替えるだけで、さまざまな集計に対応できるのがBYROW関数の強みです。
各行の最大値・最小値を求める
MAX関数やMIN関数も同じように使えます。
=BYROW(B2:D4, LAMBDA(row, MAX(row)))
| E | |
|---|---|
| 2 | 120 |
| 3 | 90 |
| 4 | 70 |
各担当者の最大売上が縦1列に並びます。どの月が最も好調だったか、担当者ごとに一目でわかりますよ。
BYROW関数の実務活用パターン
パターン1: 行ごとにデータの件数をカウントする
各行に何件のデータが入っているかをカウントする例です。
=BYROW(B2:F10, LAMBDA(row, COUNTA(row)))
COUNTA関数を使えば、空白以外のセルの数を行ごとにカウントできます。入力漏れのチェックに活躍するパターンです。
パターン2: 行ごとに条件付きカウントする
条件に合うデータだけを行ごとにカウントすることもできます。
=BYROW(B2:F10, LAMBDA(row, COUNTIF(row, ">"&100)))
各行で「100を超えるデータが何件あるか」を一括で求めています。COUNTIF関数を組み合わせれば、閾値を超えた月の数が担当者ごとに簡単にわかりますよ。
パターン3: 行ごとにユニークな値の数を数える
各行に重複なしで何種類の値があるかを数える例です。
=BYROW(B2:F10, LAMBDA(row, COUNTA(UNIQUE(TRANSPOSE(row)))))
UNIQUE関数は縦方向に重複を除外するため、行データをTRANSPOSE関数で縦に変換してから処理しています。カテゴリの多様性を行ごとにチェックしたいときに便利です。
パターン4: 行ごとの標準偏差を求める
統計的な分析にも使えます。
=BYROW(B2:F10, LAMBDA(row, STDEV(row)))
各行のばらつき度合いを一括で算出できます。担当者ごとの売上のばらつきを比較したい場面で活躍しますよ。
パターン5: 文字列の行ごとの結合
数値だけでなく、文字列の処理にも使えます。
=BYROW(B2:D10, LAMBDA(row, TEXTJOIN(", ", TRUE, row)))
各行のデータをカンマ区切りで1つのセルにまとめます。TEXTJOIN関数と組み合わせれば、リスト化がワンステップで完了です。
BYCOL関数との違い・使い分け
BYROW関数とペアで覚えたいのが、BYCOL関数です。名前のとおり、処理の方向が異なります。
| 比較項目 | BYROW関数 | BYCOL関数 |
|---|---|---|
| 処理単位 | 行ごと | 列ごと |
| 結果の方向 | 縦1列に展開 | 横1行に展開 |
| 典型的な用途 | 行ごとの合計・平均 | 列ごとの合計・平均 |
| 構文 | =BYROW(配列, LAMBDA(row, ...)) | =BYCOL(配列, LAMBDA(col, ...)) |
使い分けの目安はこうです。
- 担当者別・行方向の集計(行方向) → BYROW関数
- 月別・カテゴリ別の集計(列方向) → BYCOL関数
BYROW関数が向いている場面
BYROW関数は「行ごとの集計列を作りたい」ときに最適です。
=BYROW(B2:D4, LAMBDA(row, SUM(row)))
担当者ごとの売上表の右端に「合計」列を作る場面を思い浮かべてください。各行の合計を1つの数式で出せるので、行が追加されても数式の修正が不要です。
BYCOL関数が向いている場面
BYCOL関数は「列ごとの集計行を作りたい」ときに使います。
=BYCOL(B2:D4, LAMBDA(col, SUM(col)))
月別の売上表の最終行に「合計」行を作る場面で活躍します。結果は横1行に展開されますよ。
TIP
BYROW関数とBYCOL関数を同じ表に使えば、行方向と列方向の集計を両方自動化できます。「行の合計はBYROW、列の合計はBYCOL」と覚えておくと迷いません。
MAP関数との違い・使い分け
BYROW関数と混同しやすいのがMAP関数です。どちらもLAMBDA関数と組み合わせて使いますが、処理の粒度が異なります。
| 比較項目 | BYROW関数 | MAP関数 |
|---|---|---|
| 処理単位 | 行(複数セルのまとまり) | セル(1つずつ) |
| 結果の形 | 縦1列 | 元の配列と同じ形 |
| 向いている処理 | 集計(SUM, AVERAGE, MAX等) | 変換・加工(四捨五入、条件分岐等) |
| 引数のLAMBDA | 行全体を受け取る | 各セルの値を受け取る |
使い分けの目安はこうです。
- 行ごとにまとめて集計したい → BYROW関数
- 各セルを個別に変換・加工したい → MAP関数
MAP関数の使用例
MAP関数は各セルに対して処理を適用します。
=MAP(B2:D4, LAMBDA(val, IF(val >= 100, "達成", "未達")))
この例では、各セルの値が100以上かどうかを判定しています。結果は元の3行x3列と同じ形で返ります。
BYROW関数で同じことをしようとすると「行全体を受け取る」ため、セル単位の変換には向きません。セルごとの加工はMAP関数、行ごとの集計はBYROW関数と使い分けてくださいね。
LAMBDA系関数の全体像
スプレッドシートには、LAMBDA関数と組み合わせて使う関数が複数あります。全体像を把握しておくと、どの場面でどの関数を使うか判断しやすくなりますよ。
| 関数 | 処理単位 | 結果の形 | 主な用途 |
|---|---|---|---|
| BYROW | 行ごと | 縦1列 | 行ごとの集計 |
| BYCOL | 列ごと | 横1行 | 列ごとの集計 |
| MAP | セルごと | 元と同じ形 | セルごとの変換・加工 |
| REDUCE | 配列全体 | 1つの値 | 全体を1つに集約 |
| SCAN | 累積 | 縦1列 | 累積計算の中間結果 |
| MAKEARRAY | 行x列 | 新しい配列 | 計算で配列を生成 |
BYROW関数は「行ごとに集計して縦1列にまとめる」という、かなり限定的な用途の関数です。そのぶん使い方が明快で、迷わずに使えるのがメリットですね。
よくあるエラーと対処法
BYROW関数はLAMBDA関数と組み合わせるため、構文のミスが起こりやすいです。
| エラー | 原因 | 対処法 |
|---|---|---|
#NAME? | 関数名のスペルミス | 「BYROW」のスペルを確認してください |
#NAME? | Excelで使用しようとした | BYROW関数はGoogleスプレッドシート専用です |
#NAME? | LAMBDA関数の仮引数名が不正 | 仮引数名にセル参照(A1等)やスペースは使えません |
#VALUE! | LAMBDAが1つの値を返さない | BYROW関数のLAMBDAは各行に対して1つの値を返す必要があります。配列を返す処理は使えません |
#REF! | 出力先のセルにデータがある | 結果が縦に展開されるため、出力先の下側のセルを空にしてください |
#ERROR! | LAMBDAの引数の数が合わない | LAMBDAの仮引数は1つ(行を受け取る引数)にしてください |
| 結果が0になる | 文字列の行にSUM関数を使った | 文字列を含む行には、COUNTA関数やTEXTJOIN関数を使ってください |
特に多いのが「LAMBDAが1つの値を返さない」エラーです。BYROW関数は各行に対して1つの値(スカラー値)を返すことを期待しています。SORT関数やFILTER関数のように配列を返す処理はNGです。LAMBDAの中に書くと#VALUE!エラーになるので注意してくださいね。
TIP
LAMBDA関数の仮引数名で迷ったら、
rowを使うのがおすすめです。BYCOL関数ではcol、MAP関数ではvalやvを使うと、どの関数を使っているか一目でわかります。
まとめ
BYROW関数は、配列の各行にLAMBDA関数で処理を適用し、結果を縦1列に返す関数です。行ごとの集計をまとめて自動化できるので、行数が多い表の管理がグッと楽になります。
この記事のポイントをおさらいしておきましょう。
- BYROW関数は
=BYROW(配列, LAMBDA(row, 処理))で、各行に同じ処理を一括適用する - SUM、AVERAGE、MAX、COUNTAなど、1つの値を返す関数ならなんでもLAMBDAに組み込める
- BYCOL関数は列方向の集計、MAP関数はセルごとの変換に使い分ける
- LAMBDAは各行に対して1つの値を返す必要がある(配列を返すとエラー)
- Googleスプレッドシート独自の関数で、Excelでは使えない
まずは=BYROW(B2:D4, LAMBDA(row, SUM(row)))のシンプルな行合計から試してみてください。一度使い方を覚えれば、AVERAGE、MAX、COUNTAなど、処理部分を入れ替えるだけでさまざまな集計に応用できますよ。
