ExcelのISOMITTED関数の使い方|LAMBDAの省略引数を判定して既定値を返す

スポンサーリンク

「ExcelのISOMITTED関数って何ができるの?」「LAMBDAで作った自作関数の引数を省略できるようにしたい」。そんな疑問はありませんか?

ISOMITTED関数(読み方:イズオミッティッド)は、LAMBDA関数の引数が省略されたかを判定する関数です。関数名は「IS(〜である)+ OMITTED(省略された)」に由来します。IFと組み合わせれば、引数を省略したときに既定値を返す「省略可能引数つきカスタム関数」をVBAなしで作れます。

この記事では、ISOMITTED関数の基本構文と使い方を解説します。LAMBDA + IF を使った省略引数の実装、複数引数の省略チェック、名前付き関数としての保存、ISBLANK関数との違い、対応バージョンやよくあるエラーの対処法までカバーします。

ISOMITTED関数とは?LAMBDAの引数省略を判定するExcel関数

ISOMITTED関数は、LAMBDA関数の引数が省略されたかどうかを TRUE / FALSE で返す関数です。LAMBDA関数の中でしか意味を持たない、特殊な用途の関数です。

構文

=ISOMITTED(argument)
引数説明
argumentLAMBDA関数の引数。チェックしたい引数名をそのまま渡す

戻り値

状態戻り値
引数が省略されている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の「名前の管理」機能で名前を付けて保存できます。保存後は普通の関数のように使えます。

保存手順

  1. リボンの「数式」タブ →「名前の管理」→「新規作成」をクリック
  2. 「名前」欄に関数名を入力(例: 税込価格
  3. 「参照範囲」欄に LAMBDA 式を入力
   =LAMBDA(price,rate, IF(ISOMITTED(rate), price*1.10, price*(1+rate)))
  1. 「OK」をクリックして保存

使い方

保存後は、ワークブック全体で次のように使えます。

=税込価格(1000)
=税込価格(1000, 0.08)

第2引数は省略可能です。省略時は 10%、指定時はその税率が使われます。VBAでユーザー定義関数を作る場合と比べて、配布が簡単です。ファイルに埋め込まれるため、セキュリティ警告も出ません。

注意点

  • 名前付き関数はワークブック単位で保存されます。別ファイルでは使えません
  • 共有する場合はテンプレートとして配布するか、相手にも同じ名前付き関数を作成してもらう必要があります

ISOMITTED関数とISBLANK関数の違い・使い分け

ISOMITTEDと似た判定をする関数にISBLANKがあります。役割がまったく異なるため、混同しないよう整理しておきます。

機能の比較

関数判定対象使える場所
ISOMITTEDLAMBDAの引数が省略されたか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だけで柔軟な自作関数を組みたい場面で活躍する関数です。ぜひ一度試してみてください。

タイトルとURLをコピーしました