1
1
Excel の Lambda ヘルパー関数は未来のものですが、どれを選択すべきかを知るのは本当の課題です。これは、関数と関数を照合し、最終的には自ら考えるスプレッドシートを作成するための頼りになるガイドです。
この記事では、Microsoft 365 用 Excel、Web 用 Excel、Excel モバイル アプリとタブレット アプリの最新バージョンで使用できる 5 つの反復子およびアキュムレーター ヘルパー関数について説明します。 SCAN は Excel 2024 でも利用できます。SCAN は、異なる役割を果たす他の 2 つのヘルパー関数、MAKEARRAY (ジェネレーター) と ISOMITTED (論理チェッカー) についてはカバーしていません。
エンジン: 30 秒のラムダ リフレッシャー
LAMBDA は、その場で作成するカスタム数式と考えてください。A2*0.15 のような固定セル参照の代わりに、パラメーターを定義します。
=LAMBDA(x,x*0.15)
どこ:
この式自体はあまり役に立ちません。そのロジックを取得してデータに適用するには、ドライバーが必要です。ここで LAMBDA ヘルパー関数が活躍します。
この実行では、T_Gadgets という名前の次のテーブルをデータ ソースとして使用し、その横または上の通常のセルに数式を入力します。
Excel でテーブルの名前を変更しない場合は、今日から始めましょう。
名前には何が入っているのでしょうか?まあ、かなりの数です。
イテレータ (MAP、BYROW、BYCOL): 各セル、行、または列にロジックを適用します。
イテレーターはテーブルデータを調べて、LAMBDA ロジックを各項目に適用します。
MAP: 各セルにロジックを適用します。
|
構文 |
=MAP(配列,ラムダ(パラメータ,カウント)) |
|---|---|
|
客観的 |
T_Gadgets の各行の収益を計算し、10% 割引を適用したいと考えています。 |
|
利点 |
計算全体は 1 か所に残ります。これにより、結果内の個々の行は上書きできないため、ロジックの安全性が高まります。 |
セル F2 に入力する必要がある MAP 式は次のとおりです。
=MAP(T_Gadgets[Units],T_Gadgets[Price],LAMBDA(u,p,u*p*0.9))
どこ:
MAP を使用して並列列を結合します。 BYROW (下記) を使用して、各レコードを単一のデータのバンドルとして扱います。
BYROW: 各行の結果を取得します
|
構文 |
=BYROW(配列,LAMBDA(行,数)) |
|---|---|
|
客観的 |
T_Gadgets の単位と価格を水平方向に乗算して、各行 (日) の合計収益を取得したいと考えています。 |
|
利点 |
数百行にわたる数式を管理するのではなく、データセット全体にわたる 1 つのセル内で 1 つの数式を管理し、一貫性を確保します。 |
セル F2 の BYROW 式は次のとおりです。
=BYROW(T_Gadgets[[Units]:[Price]],LAMBDA(row,PRODUCT(row)))
どこ:
BYCOL: 各列の結果を取得します
|
構文 |
=BYCOL(配列,ラムダ(列,カウント)) |
|---|---|
|
客観的 |
T_Gadgets の Units 列と Price 列の最大値を見つける数式が必要です。 |
|
利点 |
BYCOL を 1 行で使用する その上 テーブルでは、ヘッダーの概要を作成します。これにより、巨大なテーブルを合計行まで下にスクロールする必要がなくなり、セキュリティと保守性のためにロジックが 1 つのセルに凝縮されます。 |
セル A1 の BYCOL 式は次のとおりです。
=BYCOL(T_Gadgets[#Data],LAMBDA(col,IFERROR(MAX(col),"")))
どこ:
MAX や SUM などの関数は、テキスト列に対して 0 を返すことがよくあります。数式の配置を崩さずにこの値を非表示にするには、ゼロを含むセルを選択し、[セルの書式設定]ダイアログ (Ctrl+1) でカスタム数値書式 ;;; を使用します。 (3 つのセミコロン) セルをアクティブなままにして値を非表示にします。
アキュムレータ (スキャンとリデュース): 作業を進めながら結果を構築します
アキュムレータにはメモリがあるため、テーブルの移動を追跡します。
スキャン: 累計または累計数を作成します。
|
構文 |
=scan(初期値,配列,ラムダ(アキュムレータ,値,カウント)) |
|---|---|
|
客観的 |
在庫不足を追跡するために、T_Gadgets の Units 列の毎日の累計を表示したいと考えています。 |
|
利点 |
=SUM($C$2:C2) のような従来の累計は、行を並べ替えたり削除したりすると壊れる可能性があります。 SCAN はロジックを単一セル内に保持するため、構造的な変更の影響を受けません。 |
この例では、セル F2 の SCAN 式は次のとおりです。
=SCAN(0,T_Gadgets[Units],LAMBDA(acc,val,acc+val))
どこ:
Reduce: 配列を最終的な 1 つの値に縮小します。
|
構文 |
=reduce(初期値,配列,ラムダ(アキュムレータ,値,カウント)) |
|---|---|
|
客観的 |
T_Gadgets の単位を合計したいとします。ただし、一括注文 (10 品目以上の販売) の場合に限ります。 |
|
利点 |
ネストされた SUMIF、ヘルパー列、または複数の中間ステップを避けて、マルチステップ ロジックを 1 つのセルにまとめます。 |
セル F2 に、次の REDUCE 式を入力します。
=REDUCE(0,T_Gadgets[Units],LAMBDA(acc,val,IF(val>10,acc+val,acc)))
どこ:
TL;DR: どの Lambda ヘルパー関数が必要ですか?
このクイック リファレンスを使用して、タスクに最適な関数を決定してください。
|
あなたが望むなら… |
使用… |
完全なチュートリアル |
|---|---|---|
|
各セルにロジックを適用する |
地図 |
追加 |
|
各行の結果を取得する |
ビロ |
追加 |
|
各列の結果を取得する |
ビコル |
追加 |
|
現在の合計を作成する |
スキャン |
追加 |
|
合計値を取得する |
減らす |
追加 |
これらの LAMBDA ベースの関数を使用すると、Excel ワークブックが洗練された計算機から、正式にプログラミング言語とみなされる複雑な開発環境に変換されます。それで、何を待っているのですか?現在データセット全体で繰り返している計算を見つけて、それを単一セル関数に一元化します。もう以前の方法に戻ることはありません。
Windows、macOS、iPhone、iPad、Android
1ヶ月
Microsoft 365 には、最大 5 台のデバイスでの Word、Excel、PowerPoint などの Office アプリへのアクセス、1 TB の OneDrive ストレージなどが含まれます。