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

スポンサーリンク

スプレッドシートで「列ごとの合計」や「列ごとの平均」を出したいときに困りますよね。列の数だけSUM関数やAVERAGE関数を並べるのは手間ですし、列が増えるたびに数式をコピーするのも面倒です。

BYCOL関数を使えば、すべての列に同じ計算を一括で適用できます。LAMBDA関数と組み合わせて「各列にこの処理をして」と指定するだけです。

この記事では、BYCOL関数の基本から、BYROW関数やMAP関数との違いまでわかりやすく解説します。

BYCOL関数とは?

BYCOL関数(読み方: バイコル関数)は、配列やセル範囲の各列に対してLAMBDA関数を適用する関数です。結果は横1行に返ります。「by column(列ごとに)」が名前の由来で、列単位で処理を繰り返すイメージですね。

たとえば、3行x4列の売上データにBYCOL関数でSUM処理を適用すると、4列それぞれの合計が横1行に並びます。列を追加しても数式を変更する必要がなく、自動で集計範囲が広がりますよ。

BYCOL関数にできることをまとめると、次のとおりです。

  • 各列に同じ計算(合計・平均・最大値など)を一括で適用する
  • LAMBDA関数で処理内容を自由にカスタマイズできる
  • 結果を横1行で返すため、集計行として使いやすい

NOTE

BYCOL関数はGoogleスプレッドシート独自の関数です。Excelには同じ名前の関数がないため、Excelで同様の処理をしたい場合は、各列にSUM関数やAVERAGE関数を個別に入力してください。

BYCOL関数の基本構文

=BYCOL(配列, LAMBDA(列, 処理))

カッコの中に、処理対象の配列と、各列に適用するLAMBDA関数を指定します。

引数必須/任意説明
配列必須処理対象のセル範囲または配列
LAMBDA(列, 処理)必須各列に適用する関数。「列」は各列を受け取る仮引数

LAMBDA関数の仮引数(上の例では「列」)には好きな名前を付けられます。colcでもOKです。この仮引数に各列のデータが1列ずつ渡されて、処理が実行されます。

LAMBDA関数とは?

BYCOL関数を理解するには、LAMBDA関数の基本を知っておく必要があります。

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

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

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

BYCOL関数の基本的な使い方

ここでは、月別の売上データをBYCOL関数で列ごとに集計する例を紹介します。

サンプルデータ

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

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

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

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

=BYCOL(B2:D4, LAMBDA(col, SUM(col)))

結果が横1行に展開されます。

 BCD
6240280260

4月の合計は240、5月は280、6月は260です。3列分の合計が一度に求まりましたね。

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

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

=BYCOL(B2:D4, LAMBDA(col, AVERAGE(col)))
 BCD
78093.3386.67

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

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

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

=BYCOL(B2:D4, LAMBDA(col, MAX(col)))
 BCD
8100120110

各月の最大売上が横1行に並びます。どの月が最も好調だったか、一目でわかりますよ。

BYCOL関数の実務活用パターン

パターン1: 列ごとにデータの件数をカウントする

各列に何件のデータが入っているかをカウントする例です。

=BYCOL(B2:D10, LAMBDA(col, COUNTA(col)))

COUNTA関数を使えば、空白以外のセルの数を列ごとにカウントできます。入力漏れのチェックに活躍するパターンです。

パターン2: 列ごとに条件付きカウントする

条件に合うデータだけを列ごとにカウントすることもできます。

=BYCOL(B2:D10, LAMBDA(col, COUNTIF(col, ">"&100)))

各列で「100を超えるデータが何件あるか」を一括で求めています。COUNTIF関数を組み合わせれば、閾値を超えた件数の一覧が簡単に作れますよ。

パターン3: 列ごとにユニークな値の数を数える

各列に重複なしで何種類の値があるかを数える例です。

=BYCOL(B2:D10, LAMBDA(col, COUNTA(UNIQUE(col))))

UNIQUE関数で重複を除外してからCOUNTA関数でカウントしています。カテゴリの多様性を列ごとにチェックしたいときに便利です。

パターン4: 列ごとの標準偏差を求める

統計的な分析にも使えます。

=BYCOL(B2:D10, LAMBDA(col, STDEV(col)))

各列のばらつき度合いを一括で算出できます。月ごとの売上のばらつきを比較したい場面で活躍しますよ。

パターン5: 文字列の列ごとの結合

数値だけでなく、文字列の処理にも使えます。

=BYCOL(A2:A10, LAMBDA(col, TEXTJOIN(", ", TRUE, col)))

各列のデータをカンマ区切りで1つのセルにまとめます。TEXTJOIN関数と組み合わせれば、リスト化がワンステップで完了です。

BYROW関数との違い・使い分け

BYCOL関数とペアで覚えたいのが、BYROW関数です。名前のとおり、処理の方向が異なります。

比較項目BYCOL関数BYROW関数
処理単位列ごと行ごと
結果の方向横1行に展開縦1列に展開
典型的な用途列ごとの合計・平均行ごとの合計・平均
構文=BYCOL(配列, LAMBDA(col, ...))=BYROW(配列, LAMBDA(row, ...))

使い分けの目安はこうです。

  • 月別・カテゴリ別の集計(列方向) → BYCOL関数
  • 個人別・行方向の集計(行方向) → BYROW関数

BYCOL関数が向いている場面

BYCOL関数は「列ごとの集計行を作りたい」ときに最適です。

=BYCOL(B2:D4, LAMBDA(col, SUM(col)))

月別の売上表の最終行に「合計」行を作る場面を思い浮かべてください。各列の合計を1つの数式で出せるので、列が追加されても数式の修正が不要です。

BYROW関数が向いている場面

BYROW関数は「行ごとの集計列を作りたい」ときに使います。

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

担当者ごと・商品ごとに行方向の合計を出したい場面で活躍します。結果は縦1列に展開されますよ。

TIP

BYCOL関数とBYROW関数を同じ表に使えば、行方向と列方向の集計を両方自動化できます。「列の合計はBYCOL、行の合計はBYROW」と覚えておくと迷いません。

MAP関数との違い・使い分け

BYCOL関数と混同しやすいのがMAP関数です。どちらもLAMBDA関数と組み合わせて使いますが、処理の粒度が異なります。

比較項目BYCOL関数MAP関数
処理単位列(複数セルのまとまり)セル(1つずつ)
結果の形横1行元の配列と同じ形
向いている処理集計(SUM, AVERAGE, MAX等)変換・加工(四捨五入、条件分岐等)
引数のLAMBDA列全体を受け取る各セルの値を受け取る

使い分けの目安はこうです。

  • 列ごとにまとめて集計したい → BYCOL関数
  • 各セルを個別に変換・加工したい → MAP関数

MAP関数の使用例

MAP関数は各セルに対して処理を適用します。

=MAP(B2:D4, LAMBDA(val, IF(val >= 100, "達成", "未達")))

この例では、各セルの値が100以上かどうかを判定しています。結果は元の3行x3列と同じ形で返ります。

BYCOL関数で同じことをしようとすると「列全体を受け取る」ため、セル単位の変換には向きません。セルごとの加工はMAP関数、列ごとの集計はBYCOL関数と使い分けてくださいね。

LAMBDA系関数の全体像

スプレッドシートには、LAMBDA関数と組み合わせて使う関数が複数あります。全体像を把握しておくと、どの場面でどの関数を使うか判断しやすくなりますよ。

関数処理単位結果の形主な用途
BYCOL列ごと横1行列ごとの集計
BYROW行ごと縦1列行ごとの集計
MAPセルごと元と同じ形セルごとの変換・加工
REDUCE配列全体1つの値全体を1つに集約
SCAN累積縦1列累積計算の中間結果
MAKEARRAY行×列新しい配列計算で配列を生成

BYCOL関数は「列ごとに集計して横1行にまとめる」という、かなり限定的な用途の関数です。そのぶん使い方が明快で、迷わずに使えるのがメリットですね。

よくあるエラーと対処法

BYCOL関数はLAMBDA関数と組み合わせるため、構文のミスが起こりやすいです。

エラー原因対処法
#NAME?関数名のスペルミス「BYCOL」のスペルを確認してください
#NAME?Excelで使用しようとしたBYCOL関数はGoogleスプレッドシート専用です
#NAME?LAMBDA関数の仮引数名が不正仮引数名にセル参照(A1等)やスペースは使えません
#VALUE!LAMBDAが1つの値を返さないBYCOL関数のLAMBDAは各列に対して1つの値を返す必要があります。配列を返す処理は使えません
#REF!出力先のセルにデータがある結果が横に展開されるため、出力先の右側のセルを空にしてください
#ERROR!LAMBDAの引数の数が合わないLAMBDAの仮引数は1つ(列を受け取る引数)にしてください
結果が0になる文字列の列にSUM関数を使った文字列を含む列には、COUNTA関数やTEXTJOIN関数を使ってください

特に多いのが「LAMBDAが1つの値を返さない」エラーです。BYCOL関数は各列に対して1つの値(スカラー値)を返すことを期待しています。SORT関数やFILTER関数のように配列を返す処理はNGです。LAMBDA内に書くと#VALUE!エラーになるので注意してくださいね。

TIP

LAMBDA関数の仮引数名で迷ったら、col(column の略)を使うのがおすすめです。BYROW関数ではrow、MAP関数ではvalvを使うと、どの関数を使っているか一目でわかります。

まとめ

BYCOL関数は、配列の各列にLAMBDA関数で処理を適用し、結果を横1行に返す関数です。列ごとの集計をまとめて自動化できるので、列数が多い表の管理がグッと楽になります。

この記事のポイントをおさらいしておきましょう。

  • BYCOL関数は=BYCOL(配列, LAMBDA(col, 処理))で、各列に同じ処理を一括適用する
  • SUM、AVERAGE、MAX、COUNTAなど、1つの値を返す関数ならなんでもLAMBDAに組み込める
  • BYROW関数は行方向の集計、MAP関数はセルごとの変換に使い分ける
  • LAMBDAは各列に対して1つの値を返す必要がある(配列を返すとエラー)
  • Googleスプレッドシート独自の関数で、Excelでは使えない

まずは=BYCOL(B2:D4, LAMBDA(col, SUM(col)))のシンプルな列合計から試してみてください。一度使い方を覚えれば、AVERAGE、MAX、COUNTAなど、処理部分を入れ替えるだけでさまざまな集計に応用できますよ。


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

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