エクセル BYCOL 関数:セルの範囲を列単位にループして LAMBDA で処理した配列を作成する

はじめに

エクセルの BYCOL 関数の使い方を紹介します。

BYCOL 関数はセルの範囲を列単位にループして LAMBDA 関数で処理した配列を作成します。

=BYCOL(A1:C3,LAMBDA(col,MAX(col))) のようにして、列単位の最大値を取得できます。

行単位にループするには「BYROW 関数」をご覧ください。
この関数は 365 で使用できます。
  • 目次
    • BYCOL 関数
    • 使用例
    • 解説

BYCOL 関数

BYCOL(範囲, LAMBDA)
範囲の各列をLAMBDAで処理した結果の配列を作成します。

引数「範囲」セルの範囲や配列を指定します。
引数「LAMBDA」LAMBDA 関数を指定します。LAMBDA 関数の第 1 引数に引数「範囲」の各列が順番に渡されます。それを計算した結果を配列にします。

使用例

列単位の最大値を求める

セルの範囲「C2」~「E3」の列単位の最大値を取得します。

=BYCOL(C2:E3,LAMBDA(col,MAX(col)))

引数「LAMBDA」の第 1 引数に「C2:E3」の列を順番に渡します。引数「LAMBDA」の結果が配列の要素になります。引数「LAMBDA」は次のように処理されます。

MAX(C2:C3)
MAX(D2:D3)
MAX(E2:E3)
2

列単位の合計を求める

セルの範囲「C2」~「E3」の列単位の合計を求めます。

=BYCOL(C2:E3,LAMBDA(col,SUM(col)))

引数「LAMBDA」は次のように処理されます。

SUM(C2:C3)
SUM(D2:D3)
SUM(E2:E3)
1

行の値を取得

行同士を掛け算する

列単位に個数 * 金額を求めます。

=BYCOL(C2:E3,LAMBDA(col,INDEX(col,1)*INDEX(col,2)))

INDEX 関数」に行番号を指定して、列から行の値を取得できます。

3

行の値を取得したいときは「MAP 関数」を使用してもできます。こちらの方が数式がわかりやすくなります。

=MAP(C2:E2,C3:E3,LAMBDA(x,y,x*y))

解説

引数「LAMBDA」で計算した結果を持つ配列を作成します。引数「範囲」が 3 行 3 列のときは 1 行 3 列の配列を返します。

引数「LAMBDA」の第 1 引数に引数「範囲」を列単位に順番に渡します。

引数「LAMBDA」で計算した結果がセルの範囲や配列のときはエラー #CALC! になります。単一の値を返す必要があります。

引数「LAMBDA」の引数の数が 1 つでないときはエラー #VALUE! になります。

引数「LAMBDA」に「LAMBDA 関数」を指定していないときはエラー #VALUE! になります。

行の値を取得

列から行の値を取得するには「INDEX 関数」を使用します。上記の「行同士を掛け算する」が使用例です。

=BYCOL(C2:E3,LAMBDA(col,INDEX(col,1)*INDEX(col,2)))

MAP 関数」を使用した方が数式を単純にできます。

=MAP(C2:E2,C3:E3,LAMBDA(x,y,x*y))