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

スポンサーリンク

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

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

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

  1. ISOMITTED関数とは?LAMBDAの引数省略を判定するExcel関数
    1. 構文
    2. 戻り値
    3. 対応バージョン
  2. ISOMITTED関数の基本的な使い方|IFと組み合わせて既定値を返す
    1. 例: 税込価格を計算するカスタム関数
    2. 例: 税率を明示的に渡す場合
    3. 結果の比較
  3. 複数の引数を省略可能にする実務パターン
    1. 例: 文字列を結合するカスタム関数(区切り文字と接頭辞をオプションに)
    2. 引数を一部だけ指定する場合
    3. LET と組み合わせる利点
  4. 実務で使える応用パターン3選
    1. パターン1: 端数処理の方法を選べる丸め関数
    2. パターン2: 範囲の合計に「条件」と「割引率」を後付けできる関数
    3. パターン3: MAP・REDUCEと組み合わせて配列処理を柔軟にする
  5. 名前付き関数として保存して再利用する
    1. 保存手順
    2. 使い方
    3. 注意点
  6. ISOMITTED関数とISBLANK関数の違い・使い分け
    1. 機能の比較
    2. 動作の違い(具体例)
    3. 使い分けの基準
  7. ISOMITTED関数のよくあるエラーと対処法
    1. #NAME? エラー
    2. #CALC! エラー
    3. #VALUE! エラー
  8. よくある質問(FAQ)
    1. Q1. ISOMITTEDは省略できる引数の「位置」に制限はありますか?
    2. Q2. ISOMITTEDをIFS関数やSWITCH関数と組み合わせても問題ありませんか?
    3. Q3. ISOMITTEDで判定したあと、未指定の引数に「セルの値」を既定値として使うことはできますか?
  9. まとめ|ISOMITTED関数で省略可能引数つきカスタム関数を作る

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もそれに準じます。LAMBDAやLETの基礎から学びたい方は、LET・LAMBDA関数で自作関数を作る完全ガイドも参考になります。

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を併用するのが定石です。

実務で使える応用パターン3選

ISOMITTEDは、ちょっとした自作関数を「使いやすく」するのに非常に有効です。実務でよく使う応用パターンを3つ紹介します。

パターン1: 端数処理の方法を選べる丸め関数

金額計算で「四捨五入・切り上げ・切り捨て」を切り替えたい場面は多いです。第2引数を省略したら四捨五入、"up" / "down" を指定したらそれぞれ切り上げ・切り捨てにする関数を作ります。

=LAMBDA(value,mode,
  LET(
    m, IF(ISOMITTED(mode), "round", mode),
    IF(m="up", ROUNDUP(value,0),
      IF(m="down", ROUNDDOWN(value,0), ROUND(value,0)))
  )
)(1234.5,"up")

1234.5 を切り上げて 1235 を返します。省略時は四捨五入になるので、普段使いは =丸め(1234.5) で済みます。

パターン2: 範囲の合計に「条件」と「割引率」を後付けできる関数

販売データから合計金額を出すとき、「特定の商品だけ集計したい」「割引率を後から差し込みたい」というニーズがあります。両方を省略可能にしておくと、1つの関数で複数のレポートに使い回せます。

=LAMBDA(amounts,product_col,product_name,discount,
  LET(
    base, IF(ISOMITTED(product_col), SUM(amounts),
              SUMIF(product_col, product_name, amounts)),
    rate, IF(ISOMITTED(discount), 0, discount),
    base * (1 - rate)
  )
)(B2:B100, A2:A100, "Excel本", 0.1)

商品列・商品名を省略すれば全合計、指定すれば商品別合計、さらに割引率を渡せば適用後の金額が出ます。

パターン3: MAP・REDUCEと組み合わせて配列処理を柔軟にする

MAP関数REDUCE関数に渡すLAMBDA内でもISOMITTEDは使えます。たとえば「配列の各要素に係数をかけるが、係数を省略したら何もしない」関数です。

=LAMBDA(arr,factor,
  MAP(arr, LAMBDA(x,
    IF(ISOMITTED(factor), x, x*factor)
  ))
)(A1:A5, 2)

A1:A5 の各値を2倍にして返します。第2引数を省略すれば元の値をそのまま返すので、テスト用と本番用で同じ関数が使えます。配列全体をスキャンするならSCAN関数、行・列単位で処理するならBYROW関数BYCOL関数と組み合わせるのも有効です。

名前付き関数として保存して再利用する

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でユーザー定義関数を作る場合と比べて、配布が簡単です。ファイルに埋め込まれるため、セキュリティ警告も出ません。

注意点

  • 名前付き関数はワークブック単位で保存されます。別ファイルでは使えません
  • 共有する場合はテンプレートとして配布するか、相手にも同じ名前付き関数を作成してもらう必要があります
  • 名前付き関数の作り方の全体像はLET・LAMBDA関数で自作関数を作る完全ガイドで詳しく紹介しています

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)

よくある質問(FAQ)

Q1. ISOMITTEDは省略できる引数の「位置」に制限はありますか?

第1引数だけ省略して第2引数を指定する、といった「途中省略」はできません。Excelの関数呼び出しは位置引数のため、後ろから順に省略するのが基本です。=関数(値1,,値3) のように途中の引数だけ空にすると、#VALUE! エラーや想定外の挙動になることがあります。実務的には「省略可能にしたい引数は末尾に並べる」のが安全な設計です。

Q2. ISOMITTEDをIFS関数やSWITCH関数と組み合わせても問題ありませんか?

問題ありません。IFを多段にネストすると可読性が落ちるため、分岐が3つ以上ある場合はIFSやSWITCHのほうがすっきり書けます。たとえば「引数が省略 → A、"high" → B、"low" → C」のような分岐は、IFS(ISOMITTED(x), A, x="high", B, x="low", C) の形で素直に表現できます。

Q3. ISOMITTEDで判定したあと、未指定の引数に「セルの値」を既定値として使うことはできますか?

できます。LAMBDA本体で、IFの真側に直接セル参照を書けば、省略時にそのセル値が使われます。たとえば IF(ISOMITTED(rate), Sheet1!$B$1, rate) のように書くと、Sheet1!$B$1 に入っている既定税率が省略時の値になります。設定値を1か所にまとめておくと、後からの変更が楽になります。

まとめ|ISOMITTED関数で省略可能引数つきカスタム関数を作る

ExcelのISOMITTED関数は、LAMBDA関数で定義した引数が省略されたかを TRUE / FALSE で返す関数です。IF関数と組み合わせれば、引数を省略したときに既定値を返す「省略可能引数つきカスタム関数」をVBAなしで作れます。

ポイントを整理します。

  • ISOMITTEDはLAMBDAの引数に対してのみ動作する(通常セル参照には使えない)
  • 基本パターンは IF(ISOMITTED(引数), 既定値, 通常処理)
  • 複数の引数を独立して省略チェックできる(LETと組み合わせるのが定石)
  • MAPREDUCESCANなど配列処理関数とも相性がよい
  • 「名前の管理」でLAMBDAに名前を付ければ、再利用可能なカスタム関数になる
  • ISBLANKとの違い: ISOMITTEDは「引数が渡されたか」、ISBLANKは「中身が空白か」を判定する
  • 対応バージョンはMicrosoft 365とExcel 2024のみ

LAMBDA関数でカスタム関数を作るとき、ISOMITTEDを使えば実用性が一段上がります。VBAに頼らずExcelだけで柔軟な自作関数を組みたい場面で活躍する関数です。ぜひ一度試してみてください。

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