スプレッドシートのBYROW関数の使い方|各行にLAMBDA適用

スポンサーリンク

スプレッドシートで「行ごとの合計」や「行ごとの平均」を出したいときに困りますよね。行の数だけ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関数の仮引数(上の例では「行」)には好きな名前を付けられます。rowrでもOKです。この仮引数に各行のデータが1行ずつ渡されて、処理が実行されます。

LAMBDA関数のおさらい

BYROW関数を使うには、LAMBDA関数の基本を知っておく必要があります。LAMBDA関数の詳しい仕組みはBYCOL関数の記事で解説していますので、ここではポイントだけ押さえましょう。

LAMBDA関数は「自分だけの関数を作れる」関数です。引数と処理内容を自分で定義できます。

=LAMBDA(引数, 処理)(値)

たとえば =LAMBDA(x, x2)(5) と書くと、xに5が入って「52=10」が返ります。BYROW関数の中では、このLAMBDA関数に各行のデータが自動的に渡される仕組みです。

BYROW関数の基本的な使い方

ここでは、担当者別の売上データをBYROW関数で行ごとに集計する例を紹介します。

サンプルデータ

A1:D4に以下のデータが入っているとします。

 ABCD
1 4月5月6月
2東京100120110
3大阪809085
4名古屋607065

各行の合計を一括で求める

B2:D4の数値部分に対して、行ごとの合計を求めます。出力先のセル(たとえばE2)に以下の数式を入力して、Enterを押します。

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

結果が縦1列に展開されます。

 E
2330
3255
4195

東京の合計は330、大阪は255、名古屋は195です。3行分の合計が一度に求まりましたね。

各行の平均を一括で求める

SUM関数の部分をAVERAGE関数に変えるだけで、行ごとの平均が出せます。

=BYROW(B2:D4, LAMBDA(row, AVERAGE(row)))
 E
2110
385
465

LAMBDA関数の処理部分を入れ替えるだけで、さまざまな集計に対応できるのがBYROW関数の強みです。

各行の最大値・最小値を求める

MAX関数やMIN関数も同じように使えます。

=BYROW(B2:D4, LAMBDA(row, MAX(row)))
 E
2120
390
470

各担当者の最大売上が縦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関数ではvalvを使うと、どの関数を使っているか一目でわかります。

まとめ

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など、処理部分を入れ替えるだけでさまざまな集計に応用できますよ。


この記事で紹介した関数・関連記事

タイトルとURLをコピーしました