BYROW関数 / BYCOL関数 ● LAMBDA関数に配列の各行/各列を渡して計算する

[Microsoft 365]

Excelの BYROW(バイ・ロウ)関数BYCOL(バイ・カラム)関数の使い方を紹介します。

Microsoft 365の新関数であるBYROW関数とBYCOL関数は、LAMBDA関数のヘルパー関数です。LAMBDA関数に配列を渡して行単位や列単位で計算し、その戻り値からなる配列を返します。

スポンサーリンク

書式

LAMBDA関数に配列を渡して行ごとに計算する
=BYROW(配列, LAMBDA関数)

配列]を[LAMBDA関数]に渡して行単位で計算し、その戻り値からなる配列を返します。返される配列のサイズは、[配列]の行数×1列です。

LAMBDA関数に配列を渡して列ごとに計算する
=BYCOL(配列, LAMBDA関数)

配列]を[LAMBDA関数]に渡して列単位で計算し、その戻り値からなる配列を返します。返される配列のサイズは、1行×[配列]の列数です。

引数

引数 説明
配列 配列やセル範囲を指定する。
LAMBDA関数 戻り値の計算方法を指定するためのLAMBDA関数を指定する。

LAMBDA関数の書式は以下のとおりです。LAMBDA関数では引数[変数]を最大253個指定できますが、BYROW関数やBYCOL関数と一緒に使用するときは1つだけ指定します。

=LAMBDA([変数1, 変数2…], 計算式)

LAMBDA関数の使い方は「LAMBDA関数 ● オリジナルの関数を定義する」を参照してください。

以下の「使用例1」「使用例2」では、合計計算を例にBYROW関数やBYCOL関数の使い方を紹介します。実際にはこのような単純な計算にこれらの関数を使うことはないと思いますが、関数の使い方の例として参考にしてください。

使用例1…BYROW関数で各行の合計を求める

以下の図1のシートでBYROW関数を使用して、セルB3~E5の各行の合計を求めてみましょう。

BYROW関数の引数[配列]にセルB3~E5を指定し、引数[LAMBDA関数]に「LAMBDA(x,SUM(x))」を指定します。すると、セルB3~E5の各行が1行ずつ「x」に渡され、その合計が計算されます。セルB3~E5は3行の配列なので、LAMBDA関数の計算が3回行われ、3行1列の配列が返されます。

  1. 「x」にセルB3~E3が渡される → 「=SUM(B3:E3)」が計算される → 20
  2. 「x」にセルB4~E4が渡される → 「=SUM(B4:E4)」が計算される → 33
  3. 「x」にセルB5~E5が渡される → 「=SUM(B5:E5)」が計算される → 42

実際にセルにBYROW関数を入力するときは、単一のセル(ここではセルG3)を選択して入力します。[Enter]キーを押して数式を確定すると、戻り値の配列のサイズ(ここでは3行1列)の範囲に数式がスピル(隣接するセルに数式が自動拡張すること)し、結果が表示されます。

=BYROW(配列, LAMBDA関数)

セルG3 | =BYROW(B3:E5,LAMBDA(x,SUM(x)))

図1 セルG3を選択してBYROW関数を入力する。[Enter]キーを押すと数式がスピルし、セルG3~G5の範囲にBYROW関数の結果(各行の合計)が表示される。

BYROW関数を修正したいときは、入力時と同様に単一のセルG3を選択して数式を修正し、[Enter]キーで確定してください。

使用例2…BYCOL関数で各列の合計を求める

図1の数式の「BYROW」を「BYCOL」に変えると、セルB3~E5の各列が1列ずつ「x」に渡され、各列の合計が計算されます。セルB3~E5は4列の配列なので、LAMBDA関数の計算が4回行われ、1行4列の配列が返されます。

  1. 「x」にセルB3~B5が渡される → 「=SUM(B3:B5)」が計算される → 24
  2. 「x」にセルC3~C5が渡される → 「=SUM(C3:C5)」が計算される → 25
  3. 「x」にセルD3~D5が渡される → 「=SUM(D3:D5)」が計算される → 21
  4. 「x」にセルE3~E5が渡される → 「=SUM(E3:E5)」が計算される → 25

入力するときは、単一のセル(ここではセルB7)を選択して入力します。[Enter]キーを押して数式を確定すると、戻り値の配列のサイズ(ここでは1行4列)の範囲に数式がスピル(隣接するセルに数式が自動拡張すること)し、結果が表示されます。

=BYCOL(配列, LAMBDA関数)

セルB7 | =BYCOL(B3:E5,LAMBDA(x,SUM(x)))

図2 セルB7を選択してBYCOL関数を入力する。[Enter]キーを押すと数式がスピルし、セルB7~E7の範囲にBYCOL関数の結果(各列の合計)が表示される。

BYCOL関数の修正も、入力先のセルB7を単独で選択して修正してください。

メモ

要素単位で計算したいときは
LAMBDA関数に配列を渡して要素単位で計算したいときは、MAP関数を使用します。使い方は「MAP関数 ● LAMBDA関数に配列の各要素を渡して計算する」を参照してください。

イータ縮小ラムダを使う

(2024/11/25追記)
Microsoft 365では、ヘルパー関数内のLAMBDA関数の記述を簡略化する「イータ縮小ラムダ」という仕組みが使えるようになりました。

例えば次の形式の数式の場合、

=ヘルパー関数(引数, LAMBDA(x, 関数(x)))

LAMBDA(x, 関数(x))」の部分を単純に「関数」に置き換えて、

=ヘルパー関数(引数,関数)

と簡略化できます。この簡略化された「関数」がイータ縮小ラムダです。

BYROW関数やBYCOL関数では、イータ縮小ラムダを使える箇所で入力候補のリストが表示されます。

図3 イータ縮小ラムダの候補。

表示される入力候補は、SUM、AVERAGE、MEDIAN、COUNT、COUNTA、MAX、MIN、PRODUCT、ARRAYTOTEXT、CONCAT、SRDEV.S、STDEV.P、VAR.S、VAR.P、MODE.SNGL、LAMBDA ですが、そのほかの関数も使える場合があるので試してみるとよいでしょう。

次の2つの数式は同じ結果になります。

明示的にLAMBDA関数を記述
セルD2 | =BYROW(A2:B6,LAMBDA(x,SUM(x)))

イータ縮小ラムダを使用
セルD2 | =BYROW(A2:B6,SUM)

図4 数値を行ごとにSUM関数で合計する。

スポンサーリンク

関連記事