エクセル入門
BYCOL関数(配列の列単位にLAMBDAを適用し行を集約)

Excelの初心者向け入門解説
最終更新日:2022-10-25

BYCOL関数(配列の列単位にLAMBDAを適用し行を集約)


BYCOL関数はOffice365のExcelに2022年になってから追加された新しい関数です。
BYCOL関数はLAMBDAヘルパー関数(LAMBDAと一緒に使う)の一つです。


配列の各列ごとにLAMBDAを適用して、列単位での計算結果を元配列と同じ列数(行数は1)の配列で返します。
列単位ではなく行単位で処理して列を集約する場合はBYROW関数を使います。
・REDUCE関数の構文 ・REDUCEの基本動作 ・REDUCE関数の使用例と解説 ・初期値に配列を指定した場合 ・[初期値]を省略した時の動作

エクセルの表は、横に項目を配置し縦にデータを並べるのが基本になります。
したがって、BYCOLを使って列単位のデータを処理する機会は少ないと思います。

BYCOL関数はLAMBDAヘルパー関数なので、LAMBDAについては別途習得してからお読みください。

LAMBDA以降の新関数について
・LAMBDA関数とLAMBDA関数を引数に指定できるヘルパー関数群 ・TEXT処理関数 ・配列操作関数群
LAMBDA関数(カスタム関数の作成)
・LAMBDA関数の構文 ・LAMBDA関数をセルで使う場合の基本 ・LAMBDA関数の「数式の検証」について ・LAMBDA関数をセルで使う場合の使用例 ・パラメーターの省略について ・LAMBDA関数を名前定義に登録 ・再帰関数の作成 ・LET関数内でLAMBDA関数を使用する ・LAMBDA関数にLAMBDA関数を渡す ・LAMBDA関数のネストと変数のスコープ(適用範囲) ・遅延評価によりLAMBDA関数オブジェクト(関数値)を返すことができる関数 ・LAMBDAヘルパー関数について


BYCOL関数の構文

=BYROL(配列, LAMBDA(パラメーター, 計算))



配列 配列を指定します。
単一データ(スカラー型、定数値)の指定も可能ですが使用する意味はありません。
必須です。
LAMBDA 配列の各列を計算するために呼び出されるLAMBDA。
LAMBDAは1つのパラメーターと計算が必要です:。

出力される配列は、「1行×入力配列と同じ列数」となります。


BYCOLの基本動作

Excel エクセル BYCOL関数 LAMBDA関数

数式
=BYCOL(A1:C5,LAMBDA(x,SUM(x)))
解説
Excel エクセル BYCOL関数 LAMBDA関数

BYCOLは「1行×入力配列と同じ列数」の出力配列を最初に用意すると考えてください。
A1:C5を列単位で順に処理します。
A1:A5のA1:C5の各列が順にLAMBDAxに入ります。
最初はA1:A5が取り出され、LAMBDAはパラメーターxで受け取りSUM(A1:A5)を計算し、結果は取り出した配列と同じ列位置(1列)の出力配列に格納されます。
次にB2:B5が取り出され、LAMBDAはパラメーターxで受け取りSUM(B2:B5)を計算し、結果は取り出した配列と同じ行位置(2列)の出力配列に格納されます。
これが配列の最後の列まで行われ、配列の全ての処理が終わった時の出力配列がBYCOLの戻り値となります。


Excel エクセル BYCOL関数 LAMBDA関数

BYCOL関数と似たような問題にしています。
・BYCOL関数の構文 ・BYCOLの基本動作 ・BYCOL関数の使用例と解説
BYCOLとの動作の違いを把握してください。


BYCOL関数の使用例と解説

例題
個人別の5教科(英語、国語、数学、理科、社会)の点数一覧があります。
全科目が平均点以上の人だけを一覧出力してください。
※未受験科目は0点として入力してあるものとします。
※本来なら平均点を別途出力しておくべきものですが、BYCOL/BYROWの練習として出題しています。

Excel エクセル BYCOL関数 LAMBDA関数

数式
=FILTER(A2:F12,
BYROW(
B2:F12>=BYCOL(B2:F12,LAMBDA(x,AVERAGE(x))),
LAMBDA(y,AND(y))))
解説
FILTER関数の詳細については以下を参照してください。
FILTER関数(範囲をフィルター処理)
・FILTER関数の書式 ・FILTER関数使用例のサンプルデータ ・FILTER関数の基本 ・空白セルを0ではなく空白にする場合 ・複数条件のフィルター ・関数を使ってフィルター ・横(列)でフィルター ・表示する列を選択する ・FILTER関数の結果を他の関数で使う ・スピルによって新しく追加された関数
数式の内側から順に説明していきます。
BYCOL(B2:F12,LAMBDA(x,AVERAGE(x)))
BYCOLは、B2:F12の範囲に対して左から順に列単位で処理をしていきます。
B2:B12に対して平均値を求めます。
C3:C12以降の列も同様に平均値を出していきます。
結果は「1行×入力配列と同じ列数」の配列となります。

Excel エクセル BYCOL関数 LAMBDA関数

B2:F12>=BYCOL(B2:F12,LAMBDA(x,AVERAGE(x)))
矩形範囲と、その矩形と同じ幅の横範囲を比較・計算すると、
矩形範囲の全行に対して、行単位に横範囲が適用(比較・計算)されます。

Excel エクセル BYCOL関数 LAMBDA関数

BYROW(B2:F12>=BYCOL(B2:F12,LAMBDA(x,AVERAGE(x))),LAMBDA(y,AND(y)))
上の「TRUE/FALSE」の配列をBYROW関数を使って行単位にAND関数で集約しています。
・BYROW関数の構文 ・BYROWの基本動作 ・BYROW関数の使用例と解説

Excel エクセル BYCOL関数 LAMBDA関数

これで元表と同じ高さの「TRUE/FALSE」の配列が作れましたので、、
この配列を、FILTER関数の第2引数「含む」に指定することで行の絞り込みを行っています。


LAMBDA以降の新関数の問題集 ・・・ 解答は別ページになっています。

・目次 ・LAMBDA踊るぞ編 ・LAMBDA踊るぞ編2 ・SCAN編 ・MAP編 ・REDUCE編 ・山手線営業の旅編 ・BYROW,BYCOL編 ・ここからはフリー問題だよ編 ・好きな関数を使ってくれ編 ・いろんな関数を使ってね編 ・魔球編 ・豚が木に登れば落ちることもある編 ・たまには100点とってみたいものだ編 ・これは何と言う処理なんだろ編 ・数字は嫌いなのだ編 ・外堀から埋めていくぞ編 ・なぜわざわざそうしたいのか編 ・かっこつけてんじゃないよ編 ・頭の体操だけど新関数の出番はあるか?編 ・定番だけど出してなかったよね編
LAMBDA以降の新関数の使用例
・2つの1次元配列から、それをクロス結合した結果を返す ・A列が同じ行のB列の値を連結して、A列の一意な値とともに出力 ・名前定義を使わずにLAMBDA関数で再帰する方法 ・文字列を大文字小文字変換して大小文字の全組み合わせを出力 ・2つのテーブルの片方しかない行を縦に連結出力 ・3連単、3連複のフォーメーション買目を全て列挙する ・FILTER関数の出力行数・列数を指定する ・月が縦で日が横の表を、曜日(7列)で縦に折り返す ・文字列内の括弧()()の中の文字を取り出して列挙 ・表内にあるセル内改行を複数行に展開 ・文字列の中から1文字削除の全パターン出力 ・クロスABC分析 ・月利が毎月変動する月複利の計算 ・レーベンシュタイン距離 ・文字列を数字と数字以外で分割 ・縦横スピルしないXLOOKUP代替(MATCH+INDEX,FILTER,CHOOSEROWS) ・直積(クロス結合、…




同じテーマ「エクセル入門」の記事

REDUCE関数(配列にLAMBDAを適用し累積値を返す)
SCAN関数(配列にLAMBDAを適用し格中間値を返す)
BYROW関数(配列の行単位にLAMBDAを適用し列を集約)
BYCOL関数(配列の列単位にLAMBDAを適用し行を集約)
ISOMITTED関数(LAMBDAの引数省略の判定)
MAKEARRAY関数(行数・列数で計算した配列を作成)
VSTACK関数(配列を縦方向に順に追加・結合)
HSTACK関数(配列を横方向に順に追加・結合)
CHOOSEROWS関数(配列から複数の指定された行を返す)
CHOOSECOLS関数(配列から複数の指定された列を返す)
TOCOL関数(配列を縦1列の配列にして返す)


新着記事NEW ・・・新着記事一覧を見る

数字(1~50)を丸付き数字に変換するVBA|VBA技術解説(2022-11-15)
TEXTAFTER関数(テキストの指定文字列より後ろの部分を返す)|エクセル入門(2022-11-14)
TEXTBEFORE関数(テキストの指定文字列より前の部分を返す)|エクセル入門(2022-11-14)
TEXTSPLIT関数(列と行の区切り記号で文字列を分割)|エクセル入門(2022-11-12)
LAMBDA以降の新関数はVBAで使えるか|VBA技術解説(2022-11-11)
WRAPCOLS関数(1次元配列を指定数の列で折り返す)|エクセル入門(2022-11-08)
WRAPROWS関数(1次元配列を指定数の行で折り返す)|エクセル入門(2022-11-08)
EXPAND関数(配列を指定された行と列に拡張する)|エクセル入門(2022-11-07)
TAKE関数(配列の先頭/末尾から指定行/列数を取得)|エクセル入門(2022-11-06)
DROP関数(配列の先頭/末尾から指定行/列数を除外)|エクセル入門(2022-11-06)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Excelショートカットキー一覧|Excelリファレンス
7.並べ替え(Sort)|VBA入門
8.エクセルVBAでのシート指定方法|VBA技術解説
9.マクロって何?VBAって何?|VBA入門
10.ExcelマクロVBAの基礎を学習する方法|エクセルの神髄




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ