「ExcelのISOMITTED関数って何ができるの?」「LAMBDAで作った自作関数の引数を省略できるようにしたい」。そんな疑問はありませんか?
ISOMITTED関数(読み方:イズオミッティッド)は、LAMBDA関数の引数が省略されたかを判定する関数です。関数名は「IS(〜である)+ OMITTED(省略された)」に由来します。IFと組み合わせれば、引数を省略したときに既定値を返す「省略可能引数つきカスタム関数」をVBAなしで作れます。
この記事では、ISOMITTED関数の基本構文と使い方を解説します。LAMBDA + IF を使った省略引数の実装、複数引数の省略チェック、名前付き関数としての保存、ISBLANK関数との違い、対応バージョンやよくあるエラーの対処法までカバーします。
ISOMITTED関数とは?LAMBDAの引数省略を判定するExcel関数
ISOMITTED関数は、LAMBDA関数の引数が省略されたかどうかを TRUE / FALSE で返す関数です。LAMBDA関数の中でしか意味を持たない、特殊な用途の関数です。
構文
=ISOMITTED(argument)
| 引数 | 説明 |
|---|---|
| argument | LAMBDA関数の引数。チェックしたい引数名をそのまま渡す |
戻り値
| 状態 | 戻り値 |
|---|---|
| 引数が省略されている | TRUE |
| 引数が指定されている | FALSE |
ポイントは、ISOMITTEDは LAMBDA関数の引数に対してのみ 動作することです。通常のセル参照(例: =ISOMITTED(A1))に対して使っても、正しい結果は返りません。#CALC! エラーや FALSE 固定になります。
対応バージョン
- Microsoft 365(Windows / Mac / Web)
- Excel 2024(永続ライセンス版)
- Excel for the web
Excel 2021 以前のバージョンでは使えません。#NAME? エラーになります。LAMBDA関数自体が Microsoft 365 と Excel 2024 で導入された機能です。ISOMITTEDもそれに準じます。
ISOMITTED関数の基本的な使い方|IFと組み合わせて既定値を返す
ISOMITTED関数の最も基本的な使い方は、IF関数との組み合わせです。「引数が省略されたら既定値を使う」というパターンを実装します。
例: 税込価格を計算するカスタム関数
税込価格を計算するLAMBDA関数を作ります。第2引数の税率を省略したら自動で 10% を適用する仕様にします。
=LAMBDA(price,rate,
IF(ISOMITTED(rate), price*1.10, price*(1+rate))
)(1000)
第2引数 rate を省略しているので、ISOMITTED(rate) が TRUE を返します。IFの分岐により 1000*1.10 = 1100 が結果として返ります。
例: 税率を明示的に渡す場合
=LAMBDA(price,rate,
IF(ISOMITTED(rate), price*1.10, price*(1+rate))
)(1000, 0.08)
第2引数に 0.08(8%)を渡しています。ISOMITTED(rate) は FALSE を返すため、IFの偽の側 1000*1.08 = 1080 が結果になります。
結果の比較
| 数式 | 結果 |
|---|---|
=LAMBDA(price,rate, IF(ISOMITTED(rate), price1.10, price(1+rate)))(1000) | 1100 |
=LAMBDA(price,rate, IF(ISOMITTED(rate), price1.10, price(1+rate)))(1000, 0.08) | 1080 |
=LAMBDA(price,rate, IF(ISOMITTED(rate), price1.10, price(1+rate)))(1000, 0.05) | 1050 |
このように、引数の省略可否をISOMITTEDで判定し、IFで既定値と明示値を切り替えるのが基本パターンです。
複数の引数を省略可能にする実務パターン
複数の引数をそれぞれ独立して省略可能にすることもできます。各引数ごとにISOMITTEDで個別にチェックし、IFで分岐します。
例: 文字列を結合するカスタム関数(区切り文字と接頭辞をオプションに)
=LAMBDA(text1,text2,sep,prefix,
LET(
s, IF(ISOMITTED(sep), " ", sep),
p, IF(ISOMITTED(prefix), "", prefix),
p & text1 & s & text2
)
)("Excel","関数")
第3引数 sep(区切り文字)と第4引数 prefix(接頭辞)を両方省略すると、半角スペース区切り・接頭辞なしで結合されます。結果は Excel 関数 になります。
引数を一部だけ指定する場合
=LAMBDA(text1,text2,sep,prefix,
LET(
s, IF(ISOMITTED(sep), " ", sep),
p, IF(ISOMITTED(prefix), "", prefix),
p & text1 & s & text2
)
)("Excel","関数","-")
第3引数だけ - を指定します。結果は Excel-関数 になります。第4引数は省略のままなので、接頭辞は付きません。
LET と組み合わせる利点
LET関数で中間変数(s, p)を定義することで、IFの分岐結果を一度だけ計算して再利用できます。可読性も上がるため、LAMBDA + ISOMITTEDの組み合わせではLETを併用するのが定石です。
名前付き関数として保存して再利用する
LAMBDA + ISOMITTEDで作った関数は、Excelの「名前の管理」機能で名前を付けて保存できます。保存後は普通の関数のように使えます。
保存手順
- リボンの「数式」タブ →「名前の管理」→「新規作成」をクリック
- 「名前」欄に関数名を入力(例:
税込価格) - 「参照範囲」欄に LAMBDA 式を入力
=LAMBDA(price,rate, IF(ISOMITTED(rate), price*1.10, price*(1+rate)))
- 「OK」をクリックして保存
使い方
保存後は、ワークブック全体で次のように使えます。
=税込価格(1000)
=税込価格(1000, 0.08)
第2引数は省略可能です。省略時は 10%、指定時はその税率が使われます。VBAでユーザー定義関数を作る場合と比べて、配布が簡単です。ファイルに埋め込まれるため、セキュリティ警告も出ません。
注意点
- 名前付き関数はワークブック単位で保存されます。別ファイルでは使えません
- 共有する場合はテンプレートとして配布するか、相手にも同じ名前付き関数を作成してもらう必要があります
ISOMITTED関数とISBLANK関数の違い・使い分け
ISOMITTEDと似た判定をする関数にISBLANKがあります。役割がまったく異なるため、混同しないよう整理しておきます。
機能の比較
| 関数 | 判定対象 | 使える場所 |
|---|---|---|
| ISOMITTED | LAMBDAの引数が省略されたか | LAMBDA関数の本体内のみ |
| ISBLANK | セルが空白(未入力)か | 通常の数式すべて |
動作の違い(具体例)
セル A1 が空白の状態で、次の自作関数を呼び出します。
=LAMBDA(x, IF(ISOMITTED(x), "省略", "指定あり"))(A1)
引数 x には A1 の参照が渡されています。そのためISOMITTEDは FALSE(指定あり)を返します。A1 が空白セルでも、引数として渡されている以上「省略されていない」と判定されます。
一方、ISBLANKで同じ判定をすると次のようになります。
=LAMBDA(x, IF(ISBLANK(x), "空セル", "値あり"))(A1)
A1 が空白なら ISBLANKは TRUE(空セル)を返します。
使い分けの基準
- 「引数自体が渡されたか」を判定したい → ISOMITTED
- 「渡された引数の中身が空白か」を判定したい → ISBLANK
両方を組み合わせて「省略 or 空セルなら既定値」とすることもできます。
=LAMBDA(x,
IF(OR(ISOMITTED(x), ISBLANK(x)), "デフォルト値", x)
)
ISOMITTED関数のよくあるエラーと対処法
ISOMITTEDでエラーが出やすいケースと対処法をまとめます。
#NAME? エラー
原因: ExcelのバージョンがISOMITTEDに対応していない
対処法: Microsoft 365 または Excel 2024 にアップグレードします。Excel 2021 以前では使用できません。会社の環境でアップグレードできない場合は、VBAでユーザー定義関数を作る方法を検討してください。
#CALC! エラー
原因: ISOMITTEDをLAMBDAの外で使った、またはLAMBDA引数以外の値に対して使った
対処法: ISOMITTEDは必ずLAMBDA関数の本体内で使ってください。対象は、そのLAMBDAで定義した引数名に限定されます。
=ISOMITTED(A1)
このような書き方は動作しません(A1はLAMBDAの引数ではないため)。
#VALUE! エラー
原因: LAMBDA本体の処理が、省略された引数を計算に使ってしまっている
対処法: ISOMITTEDで先に分岐させ、省略時は引数を直接参照しないようにします。次の例ではエラーになります。
=LAMBDA(price,rate, price*(1+rate))(1000)
第2引数 rate を省略しているのに、本体で rate を計算に使っているためエラーになります。ISOMITTEDで先にチェックする形に書き換えてください。
=LAMBDA(price,rate, IF(ISOMITTED(rate), price*1.10, price*(1+rate)))(1000)
まとめ|ISOMITTED関数で省略可能引数つきカスタム関数を作る
ExcelのISOMITTED関数は、LAMBDA関数で定義した引数が省略されたかを TRUE / FALSE で返す関数です。IF関数と組み合わせれば、引数を省略したときに既定値を返す「省略可能引数つきカスタム関数」をVBAなしで作れます。
ポイントを整理します。
- ISOMITTEDはLAMBDAの引数に対してのみ動作する(通常セル参照には使えない)
- 基本パターンは
IF(ISOMITTED(引数), 既定値, 通常処理) - 複数の引数を独立して省略チェックできる(LETと組み合わせるのが定石)
- 「名前の管理」でLAMBDAに名前を付ければ、再利用可能なカスタム関数になる
- ISBLANKとの違い: ISOMITTEDは「引数が渡されたか」、ISBLANKは「中身が空白か」を判定する
- 対応バージョンはMicrosoft 365とExcel 2024のみ
LAMBDA関数でカスタム関数を作るとき、ISOMITTEDを使えば実用性が一段上がります。VBAに頼らずExcelだけで柔軟な自作関数を組みたい場面で活躍する関数です。ぜひ一度試してみてください。
