BYROW・BYCOL関数の使い方|1行ずつ・1列ずつ合計や判定を1つの式で【実機で解説】

BYROW・BYCOL関数の使い方|1行ずつ・1列ずつ合計や判定を1つの式で【実機で解説】

BYROW 関数は、表を1 行ずつ取り出して計算し、結果を縦に並べる関数です。BYCOL 関数は同じことを1 列ずつ行い、結果を横に並べます。=BYROW(B2:D6,LAMBDA(r,SUM(r))) と書くと、1 人ずつの合計点が 1 つの式で出ます。

SUM を下にコピーする代わりに 1 つの式で済み、行が増えても式を直す所は 1 か所です。この記事では、BYROW・BYCOL の基本と LAMBDA の書き方を、実際の Excel で確かめた結果で説明します。どちらも Microsoft 365 の関数です。

練習用Excelファイル(無料ダウンロード)
テストの点数の表と、この記事の BYROW・BYCOL の式をまとめた練習ファイルです。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り
目次

BYROW・BYCOL 関数の書き方

=BYROW(範囲, LAMBDA(行, 計算))
=BYCOL(範囲, LAMBDA(列, 計算))
引数意味
範囲計算したい表(見出しは含めない)
LAMBDA(r, 計算)1 行ぶん(BYCOL なら 1 列ぶん)を r という名前で受け取り、計算のしかたを書く
r(名前は自由)取り出した 1 行。SUM(r) ならその行の合計

LAMBDA の r は自分で付ける名前です。名前は 1 文字目を英字にして、r や row のように短く付けます。計算の結果は、1 行につき値 1 つにします。

1. 1 人ずつの合計点(BYROW)

B2:D6 を 1 行ずつ取り出して、SUM で合計します。

=BYROW(B2:D6,LAMBDA(r,SUM(r)))
エクセルのBYROW関数とLAMBDAで表の1行ずつの合計点を1つの式で出した画面
エクセルのBYROW関数とLAMBDAで表の1行ずつの合計点を1つの式で出した画面

佐藤さんは 217、鈴木さんは 213、高橋さんは 265 でした。SUM を 5 回コピーしたのと同じ結果です。

2. 1 人ずつの最高点(BYROW)

SUM を MAX に変えると、1 行ずつの最高点になります。MIN・AVERAGE・COUNT も同じように使えます。

=BYROW(B2:D6,LAMBDA(r,MAX(r)))
エクセルのBYROW関数でLAMBDAの中をMAXにして1行ずつの最高点を出した画面
エクセルのBYROW関数でLAMBDAの中をMAXにして1行ずつの最高点を出した画面

上から 80・90・92・81・73 になりました。

3. 科目ごとの平均(BYCOL)

BYCOL は 1 列ずつ取り出すので、科目ごとの平均が横に並びます。

=BYCOL(B2:D6,LAMBDA(c,AVERAGE(c)))
エクセルのBYCOL関数で1列ずつ取り出して科目ごとの平均点を横に並べた画面
エクセルのBYCOL関数で1列ずつ取り出して科目ごとの平均点を横に並べた画面

国語 72.2・数学 71.6・英語 74.2 でした。

4. 全科目 60 点以上なら合格(BYROW+IF)

1 行のいちばん低い点(MIN)が 60 以上なら「合格」とします。LAMBDA の中には IF などふつうの式を書けます。

=BYROW(B2:D6,LAMBDA(r,IF(MIN(r)>=60,"合格","不合格")))
エクセルのBYROW関数とIFとMINで全科目60点以上なら合格と1行ずつ判定した画面
エクセルのBYROW関数とIFとMINで全科目60点以上なら合格と1行ずつ判定した画面

結果は 合格 / 不合格 / 合格 / 不合格 / 不合格 でした。鈴木さん(国語 55)、田中さん(数学 48)、伊藤さん(英語 59)が不合格です。1 科目でも 60 点未満があると不合格になります。IF の使い方は IF関数の使い方で説明しています。

【実機で検証】BYROW でつまずくところ

エクセルのBYROW関数でLAMBDAを省いた書き方や配列を返したときの#CALC!を確かめた画面
エクセルのBYROW関数でLAMBDAを省いた書き方や配列を返したときの#CALC!を確かめた画面
ためしたこと式結果
LAMBDA を使った合計(佐藤)=INDEX(BYROW(BYROW!B2:D6,LAMBDA(r,SUM(r))),1)217
LAMBDA を省いて SUM だけ(佐藤)=INDEX(BYROW(BYROW!B2:D6,SUM),1)217
SUM(B2:D6) だけだと=SUM(BYROW!B2:D6)1090
1 行に 2 つ以上の値を返すと=BYROW(BYROW!B2:D6,LAMBDA(r,r*2))#CALC!
空白の行(B7:D7)をふくめた合計の 6 行目=INDEX(BYROW(BYROW!B2:D7,LAMBDA(r,SUM(r))),6)0

佐藤さんの合計は、LAMBDA を使っても(217)、BYROW(B2:D6,SUM) と関数名だけを書いても(217)同じでした。SUM・MAX などをそのまま使うだけなら、短く書けます。

SUM(B2:D6) だけでは、全員の合計 1090 が 1 つ出るだけです。1 行ずつにしたいときに BYROW を使います。

LAMBDA の結果が 1 行に 2 つ以上(配列)になると #CALC! になりました。1 行につき値は 1 つにします。空白の行は SUM で 0 になるので、範囲は表のぴったりにします。

よくある質問

BYROW が使えない(#NAME?)ときは?

BYROW・BYCOL は Microsoft 365 の関数です。Excel 2021 以前では、SUM などを 1 行目に書いて下へコピーします。

MAP 関数とのちがいは?

MAP はセルを 1 つずつ計算します。BYROW は 1 行ぶんをまとめて受け取るので、行の合計や最大のような「行の中で集計する」計算に向いています。

分類ごとにまとめたいときは?

1 行ずつではなく分類ごとに合計したいときは GROUPBY 関数を使います。

練習用Excelファイル(無料ダウンロード)
この記事の例をまとめた練習ファイルです。
Excelファイル(.xlsx)/登録不要/数式・練習データ入り

あわせて読みたい:関連記事

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次