VBA関数
IsMissing関数

Excelマクロで必須のVBA関数を入門・初級・初心者向けに詳細解説
最終更新日:2020-05-23

IsMissing関数


プロシージャを呼び出すときに省略可能なバリアント型 (Variant) の引数がプロシージャに渡されたかどうかを調べるために使用します。



IsMissing関数

IsMissing(argname)

引数 argname は必ず指定します。
引数 argname には、プロシージャの省略可能なバリアント型 (Variant) の引数の名前を指定します。

指定した引数が渡されていない場合は、真 (True) を返します。
それ以外は、偽 (False) を返します。

IsMissing関数がある引数に対して真(True)を返すとき、つまり引数が省略されている場合は、
その引数を他のコード内で使うと、ユーザー定義エラーが発生することがあります。

キーワード ParamArray を指定した引数に IsMissing 関数を使うと、常に偽 (False) が返されます。

キーワード ParamArray を指定した引数が空であるかどうかを調べるには、配列の上限が下限よりも小さいかどうかをテストします。
VBAリファレンスには、上記のように書かれていますが、
IsMissing関数は、ParamArray引数が渡されていない場合はTrue、渡された場合はFalseを返します。

IsMissing 関数では、バリアント型ではない、整数型や倍精度浮動小数点型などの通常のデータ型に対しては無効です。
これは、整数型などのデータ型では、引数が指定されたかどうかを判断するためのフラグが提供できないためです。
よって、バリアント型以外の引数を判別したい場合は、プロシージャの構文内で変数の既定値を代入しておきます。


IsMissingの致命的な問題
特定条件下でIsMissing関数を使用した場合、Excelそのものが強制してしまいます。
VBA.IsMissingの致命的な問題

使用例.

Sub sample()
  Call sample2("引数")
  Call sample2
  Call sample3
End Sub

Sub sample2(Optional sMsg = "初期値")
  MsgBox sMsg
End Sub

Sub sample3(Optional sMsg)
  If IsMissing(sMsg) Then
    sMsg = "省略"
  End If
  MsgBox sMsg
End Sub




sample2では、初期値を指定していますので、
Callで省略されたときは、その初期値を受け取ることになります。

sample3では、初期値を指定していないので、
IsMissing関数で、引数が省略されているかどうかを判定しています。

上記の実行結果は、
引数
初期値
省略
この順に、メッセージボッスに出力されます。

初期値を省略したOptionalは、実務では必ずしも使う必要性はありません。
特定の初期値を指定しておき、それで判定した方が良いからです。
何より、Variant型でしかほとんど意味を持たない為、使用する機会は少なくなります。


※VBA関数一覧

VBA関数の一覧と解説です、どんな関数があるかは一度は確認しておくとをお勧めいたします。どんな関数があるだけでも知っておけば、詳細の使い方は実際に使うときに調べても良いでしょう。文字列操作…34 分岐…3 型変換…14 データ判定…10 日付時刻…20 配列…6 ファイル操作…14 数学/財務…28 その他…18 MicrosoftDocsOfficeV…



同じテーマ「VBA関数」の記事

IsDate関数
IsEmpty関数
IsNumeric関数
IsMissing関数
IsObject関数
IsError関数
IsNull関数
TypeName関数
VarType関数
Date関数
DateAdd関数


新着記事NEW ・・・新着記事一覧を見る

Variantの数値型と文字列型の比較|エクセル雑感(7月1日)
VBAのVariant型について|VBA技術解説(6月30日)
VBAのString型の最大文字数について|エクセル雑感(6月20日)
VBAで表やグラフをPowerPointへ貼り付ける|VBAサンプル集(6月19日)
アクティブシート以外の表示(Window)に関する設定|VBA技術解説(6月17日)
マクロ記録での色のマイナス数値について|エクセル雑感(6月16日)
ツイッター投稿用に文字数と特定文字で区切る|エクセル雑感(6月15日)
日付の謎:IsDateとCDate|エクセル雑感(6月14日)
IFステートメントの判定|エクセル雑感(6月13日)
インクリメンタルサーチの実装|ユーザーフォーム入門(6月12日)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.変数宣言のDimとデータ型|VBA入門
4.マクロって何?VBAって何?|VBA入門
5.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
6.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
7.繰り返し処理(For Next)|VBA入門
8.セルに文字を入れるとは(Range,Value)|VBA入門
9.とにかく書いてみよう(Sub,End Sub)|VBA入門
10.マクロはどこに書くの(VBEの起動)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ