【VBA】引数のタイプを判定するIs…関数のまとめ | あじゅWeb

【VBA】引数のタイプを判定するIs…関数のまとめ

エクセルVBAでよく使う関数のまとめ。引数が数値かどうかや文字列かどうかなど、値のタイプを判定するIS…関数のまとめ。セル関数についてはこちらを参照。

スポンサーリンク

変数が配列かどうか判定:IsArray関数

IsArray関数は引数として与えられた変数が配列の場合はTRUEを、配列でない場合はFALSEを返します。配列でない場合は、変数のIndexを指定して値にアクセスしようとするとエラーになるので、例えばVariant型変数が状況によって配列になったりならなかったりする場合の処理を分けるのに使います。

サンプルコード

'--- 判定する変数 ---'
Dim val as Long
Dim valArray(1 to 4) as Long

'--- 戻り値を格納する変数 ---'
Dim retVal as Boolean

'--- 引数が配列でない場合はFALSEを返す ---'
retVal = IsArray(val)

'--- 引数が配列の場合はTRUEを返す ---'
retVal = IsArray(valArray)

日付かどうかの判定:IsDate関数

引数が日付として認識できる場合にはTRUEを、そうでない場合にはFALSEを返します。補足ですが、VBAで日付を入力する場合には#で囲んでやると直感的に表記することが可能です(下記参照)。

サンプルコード

'--- 判定する変数 ---'
Dim val As Variant
    
'--- 戻り値を格納する変数 ---'
Dim retVal As Boolean
    
'--- 文字列として認識された場合はFALSEを返す ---'
val = "2019/4/17"
retVal = IsDate(val)
    
'--- 日付として認識された場合はTRUEを返す ---'
val = #2019/4/17#
retVal = IsDate(val)

変数が初期状態かどうかの判定:IsEmpty関数

IsEmpty関数は引数として与えられた変数が初期状態かEmptyという値が設定されている場合にTRUEを返します。

サンプルコード

'--- 判定する変数 ---'
Dim val As Variant
    
'--- 戻り値を格納する変数 ---'
Dim retVal As Boolean
    
'--- 値が設定されていない場合はTRUEを返す ---'
retVal = IsEmpty(val)
    
'--- 値が設定されたあとはFALSEを返す ---'
val = 2
retVal = IsEmpty(val)
    
'--- 明示的にEmptyを設定するとTRUEを返す ---'
val = Empty
retVal = IsEmpty(val)

引数がエラーかどうか判定:IsError関数

IsError関数は引数としてエラー値が与えられた場合はTRUEを、それ以外の場合はFALSEを返します。例えば、取得したセルの値がエラーかどうか判定する際などに使います。下記のサンプルコードでは、CVErr関数を使って無理やりエラー値を設定しています。CVErr関数の使い方についてはこちらをご覧ください。

サンプルコード

'--- 判定する変数 ---'
Dim val As Variant
    
'--- 戻り値を格納する変数 ---'
Dim retVal As Boolean
    
'--- 値がエラーでない場合はFALSEを返す ---'
val = 2
retVal = IsError(val)
    
'--- 値がエラー(今回は#N/A)の場合はFALSEを返す ---'
val = CVErr(xlErrNA)
retVal = IsError(val)

関数の引数が与えられたかどうか判定:IsMissing

IsMissing関数は使い方が特殊ですが、慣れるとかなり便利な関数です。この関数は自作の関数に任意の引数(Optional引数)を設定した場合に使われます。ユーザーが与えても与えなくてもよいOptional引数が関数に含まれている場合、その引数が存在するか否かで処理を分ける必要があります。IsMissing関数にその引数を与えてやると、関数使用時にその引数が与えられていればTRUEを、そうでなければFALSEを返します。

下記のサンプルコードでは、testという自作関数を定義してそのなかでIsMissing関数を使用しています。引数xを与えるかどうかでIsMissing関数の戻り値が変わるのでそれを利用して処理を分岐しています。

サンプルコード

Public Sub IsMissingTest()
    
    Dim x As String
    
    '--- 引数xを与えた場合はIsMissingがFALSEとなる ---'
    x = test
    
    '--- 引数xを与えた場合はIsMissingがFALSEとなる ---'
    x = test(1)
    
End Sub


Public Function test(Optional x) As String
    
    Dim retVal As String
    
    If (IsMissing(x)) Then
        retVal = "Missing"
    Else
        retVal = "Not Missing"
    End If
    
    test = retVal
    
End Function

無効データ(Null)かどうか判定:IsNull関数

IsNull関数は無効なデータ(Null)かどうかを判定し、Null値は、Variant型変数に有効な値が設定されていないことを示す値です。

サンプルコード

'--- 判定する変数 ---'
Dim val As Variant
    
'--- 戻り値を格納する変数 ---'
Dim retVal As Boolean
    
'--- 初期値はNullではないのでFALSEを返す ---'
retVal = IsNull(val)

'--- 値が設定されているとFALSEを返す ---'
val = 2
retVal = IsNull(val)

'--- Null値だとTRUEを返す ---'
val = Null
retVal = IsNull(val)

数値かどうか判定:IsNumeric関数

IsNumeric関数は引数が数字の場合はTRUEを、それ以外の場合はFALSEを返します。ちなみにセル上で数値かどうかを判定する関数はIsNumber関数なのでやや紛らわしいです。セル上で使用する関数についてはこちらをご参照ください。

サンプルコード

'--- 判定する変数 ---'
Dim val As Variant
    
'--- 戻り値を格納する変数 ---'
Dim retVal As Boolean
    
'--- 数値ではない場合はFALSEを返す ---'
val = "string"
retVal = IsNumeric(val)

'--- 数値の場合はTRUEを返す ---'
val = 2
retVal = IsNumeric(val)

オブジェクト変数かどうか判定:IsObject関数

IsObject関数は引数として与えられた変数がオブジェクト変数であればTRUEを、それ以外の場合はFALSEを返します。Variant型変数として取得する値がオブジェクト変数であったり、そうでなかったりする場合で処理を分ける際などに使用します。

サンプルコード

'--- 判定する変数 ---'
Dim val As Variant
    
'--- 戻り値を格納する変数 ---'
Dim retVal As Boolean
    
'--- オブジェクトではない場合はFALSEを返す ---'
val = 2
retVal = IsObject(val)

'--- オブジェクト(例はWorkbookオブジェクト)の場合はTRUEを返す ---'
Set val = ThisWorkbook
retVal = IsObject(val)