2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Missingを能動的に取得する

Posted at

VBAのMissingを自力で作成する方法のメモです。

Missingとは?

Variant型に格納できる特殊な値の一つで、省略可能なVariant型引数が省略されたことを示す値です。

ローカルウィンドウ上などでは、以下のように値に「参照不可」と表示されるのが特徴です。

image.png

参考

Missing以外のVariantのみに格納できる特殊な値は以下のようなものが存在します。

Empty

数値として扱うと0、文字列として扱うと空文字列になる値。
Variant型変数の初期値として使われる。

IsEmpty 関数VarType 関数で判定でき、Emptyキーワードで取得できる。

Null

無効な値。
データベースや、一部のオブジェクトで値が設定されていないことを示すのに使われる。
IsNull 関数VarType 関数で判定でき、Nullキーワードで取得できる。

データベースを扱うAccessのタイプライブラリには、簡単に扱うための関数なども定義されている。

エラー値

なんらかのエラーを示す値。
Excelのワークシート関数のエラーなどは、この値で表現される。

参考
VBAでセルのエラーの種類を判定する(CVErr + XlCVError 列挙型) - Qiita

内部に持つ数値により複数の種類があり、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プロパティなど、引数省略時の動作が特殊なものを呼ぶときに知っていると便利なこともあるかもしれません。

関連

VBA.IsMissingの致命的な問題 - Qiita

2
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?