概要
Microsoft 365の登場により、Excelの関数環境は劇的な進化を遂げました。特に「LAMBDA関数」と「LET関数」の組み合わせは、従来のExcelの限界を突破する革命的な手法です。本稿では、標準関数には存在しない「条件付きMEDIAN関数(指定した条件に合致するデータの中央値を算出する関数)」を、LAMBDA関数を用いて自作する方法を解説します。さらに、この応用技術を深掘りし、あらゆる統計関数に対して「汎用的なIFS形式(条件付き計算)」を実装するアーキテクチャについて詳細に論じます。
詳細解説
ExcelにはAVERAGEIFSやSUMIFSといった便利な条件付き集計関数が用意されていますが、なぜか「MEDIANIFS」や「STDEV.PIFS」といった関数は存在しません。従来であれば、配列数式(Ctrl+Shift+Enter)やFILTER関数を駆使してデータを抽出した後に計算を行う必要があり、数式が冗長化しがちでした。
LAMBDA関数を使えば、この課題を解決する「独自の関数」を名前定義として保存し、あたかも標準関数であるかのようにワークシート上で呼び出すことが可能です。
本質的なアプローチは「FILTER関数によるデータの動的抽出」を、計算関数の引数に組み込むことです。例えば、MEDIAN関数は配列を受け取りますが、FILTER関数を使えば条件に合致した範囲のみを配列としてMEDIAN関数に渡すことができます。
この仕組みを汎用化するために、以下のロジックを構築します。
1. 第一引数:計算対象の範囲
2. 第二引数:条件範囲(複数可)
3. 第三引数:条件(複数可)
これらをLAMBDA関数内でLET関数を用いて整理し、計算結果を導き出します。
サンプルコード
以下は、特定の条件に合致した値の中央値を算出する「MEDIANIFS」を自作するためのLAMBDA定義です。これをExcelの「名前の管理」から「MEDIANIFS」という名前で登録してください。
=LAMBDA(計算範囲, 条件範囲1, 条件1,
LET(
フィルタ結果, FILTER(計算範囲, 条件範囲1=条件1, "該当なし"),
MEDIAN(フィルタ結果)
)
)
さらに、これを拡張して「二つの条件(AND条件)」に対応させる場合は以下のように記述します。
=LAMBDA(計算範囲, 条件範囲1, 条件1, 条件範囲2, 条件2,
LET(
条件合致, (条件範囲1=条件1)*(条件範囲2=条件2),
フィルタ結果, FILTER(計算範囲, 条件合致, "該当なし"),
MEDIAN(フィルタ結果)
)
)
この関数をワークシート上で使用する際は、通常の関数と同じように以下のように入力します。
=MEDIANIFS(B2:B100, A2:A100, "東京", C2:C100, "売上")
実務アドバイス
実務においてこの手法を採用する際、いくつかの注意点があります。
第一に「エラーハンドリング」です。FILTER関数は条件に合致するデータがゼロの場合、#CALC!エラーを返します。上記のサンプルでは”該当なし”という文字列を返していますが、これをさらに発展させ、IFERROR関数で0を返すのか、あるいは空白を返すのかを業務要件に合わせて定義しておく必要があります。
第二に「計算コスト」です。LAMBDA関数は強力ですが、膨大なデータに対して複雑な条件式を組み込むと、再計算のたびにExcelの動作が重くなる可能性があります。数千行を超える大規模なデータセットを扱う場合は、Power Query(パワークエリ)での前処理を検討するべきです。LAMBDA関数は、あくまで「動的で柔軟な小〜中規模のデータ分析」において最大の威力を発揮します。
第三に「可読性の確保」です。複雑な計算式をLAMBDA関数に詰め込むと、後任者がメンテナンスできなくなるリスクがあります。必ず数式の中にコメントアウト(LET関数内の計算ロジック)を明記し、どのような意図でその計算を行っているのかを明文化する習慣をつけましょう。
汎用IFSを実現するための設計思想
今回のMEDIANIFSの考え方を応用すれば、例えば「モード(MODE.SNGL)の条件付き計算」や「パーセンタイル(PERCENTILE.INC)の条件付き計算」も同様のロジックで作成可能です。
設計の肝は、計算関数部分を「引数」として受け取る汎用型LAMBDAの作成です。以下のコードは、あらゆる計算を条件付きで行うための「メタ関数」の雛形です。
=LAMBDA(計算関数, 計算範囲, 条件範囲, 条件,
LET(
抽出データ, FILTER(計算範囲, 条件範囲=条件),
計算関数(抽出データ)
)
)
このメタ関数を作成しておけば、呼び出し側で「MEDIAN」や「STDEV.S」を渡すだけで、自動的に条件付き計算が行われます。これはオブジェクト指向プログラミングにおける「高階関数」の概念そのものです。Excelが単なる表計算ソフトから、高度なプログラミング言語へと進化している証左と言えるでしょう。
まとめ
LAMBDA関数による「汎用IFS」の実現は、Excel職人としてのスキルを一段階引き上げる強力な武器です。標準関数に存在しない計算式を自ら定義することで、複雑な集計業務を劇的に効率化し、ミスを減らし、レポート作成の時間を短縮できます。
今回紹介したMEDIANIFSは入り口に過ぎません。まずはこのコードを自身のExcel環境に登録し、自分の業務データで試してみてください。一度この「計算ロジックを関数化する」という体験をすれば、Excelに対する捉え方が根本から変わるはずです。
数式は、ただ結果を出すためだけのものではありません。メンテナンス性が高く、論理的に整理された数式を組むことこそが、プロフェッショナルなExcelユーザーの矜持です。ぜひこの技術を習得し、明日の業務から「自分だけの関数」を駆使した快適なデータ分析ライフを送ってください。
