VBAのMissing
を自力で作成する方法のメモです。
Missing
とは?
Variant
型に格納できる特殊な値の一つで、省略可能なVariant
型引数が省略されたことを示す値です。
ローカルウィンドウ上などでは、以下のように値に「参照不可」と表示されるのが特徴です。
参考
Missing
以外のVariant
のみに格納できる特殊な値は以下のようなものが存在します。
Empty
数値として扱うと0、文字列として扱うと空文字列になる値。
Variant型変数の初期値として使われる。
IsEmpty 関数やVarType 関数で判定でき、Emptyキーワードで取得できる。
Null
無効な値。
データベースや、一部のオブジェクトで値が設定されていないことを示すのに使われる。
IsNull 関数やVarType 関数で判定でき、Nullキーワードで取得できる。
データベースを扱うAccessのタイプライブラリには、簡単に扱うための関数なども定義されている。
エラー値
なんらかのエラーを示す値。
Excelのワークシート関数のエラーなどは、この値で表現される。
内部に持つ数値により複数の種類があり、Missingもエラー値の一種となる。
IsError 関数やVarType 関数で判定でき、CVErr 関数で取得できる。
Decimal
高精度な数値型。
VarType 関数で判定でき、CDec関数で取得できる。
作成方法
Array 関数の引数を省略すれば、そのインデックスの値がMissing
となるため、そこから取得できます。
'Get "Missing" value
Public Property Get Missing() As Variant
Static cacheMissing As Variant '高速化のためキャッシュする
If VBA.IsEmpty(cacheMissing) Then _
Let cacheMissing = VBA.Array(, Empty)(0)
Let Missing = cacheMissing
End Property
普通にArray 関数を呼び出すと、Option Base
の影響を受けるため、VBA.Array
とライブラリ名を指定して0
始まりと明示しています。
役に立つ場面
……正直あまりないですが、ExcelのRangeのResize
プロパティなど、引数省略時の動作が特殊なものを呼ぶときに知っていると便利なこともあるかもしれません。