ExcelVBA

一次元/二次元配列が空かどうか判定する【ExcelVBA】

VBAで高速処理に欠かせない配列処理

ExcelVBAマクロは動作が遅いと言われがちです。それは大きな間違いです。
大体そういう方は、大量のデータをワークシート内のセルで、検索代入計算しており
その処理方法が間違いです。

一次元配列もしくは二次元配列にデータを格納してから処理をすることで、
速度の改善が見込めます。

ただ、配列処理となると厄介だから勉強していない!という初心者の方も多いでしょう。

単純に、ワークシート内のセル範囲配列同様と考えると簡単かもしれません。

配列が空かどうか判定する

二次元配列を動的に作成したい場合、配列の要素がいくつか判断するのはとても重要です。
ExcelVBAマクロ「二次元配列を動的に行数(一次元目)を増やす」をパーツ化する

ここでネックになるのは最初の配列の宣言です。
配列が空の状態でUbound関数を使用すると実行時エラーが出てしまいます。

■イメージ図
実行時エラー “9”
インデックスの範囲が有効ではありません

インデックスが有効範囲にありません

配列が空かどうか判定するサンプルコード

'■配列が空かどうか判定する
Public Sub test_Array_null_check()
    Dim arr() As Variant
    
    '■実行時エラー 「インデックスの範囲が有効ではありません」が出てしまう
'    MsgBox UBound(arr)
    
    '■Not Notと2回することでエラーが発生しない
    If Not Not arr Then
        MsgBox "配列が空です"
    Else
        MsgBox "配列が存在します"
    End If
End Sub

 

VBAには配列が空かどうか確認する関数は用意されていません。
自作した関数でエラー発生時に無理やり判定するのも一つの手なのですが、
Not Notの使い方を理解していれば、無駄にパーツ化(サブプロシージャ化)しなくてもよいです。

関連記事

ExcelVBAマクロ「二次元配列を動的に行数(一次元目)を増やす」をパーツ化する
ExcelVBAマクロ「一次元/二次元配列の要素数の最大値を取得する」【Ubound関数】
ExcelVBAマクロ「配列の初期化と宣言(静的/動的/1次元/2次元)」【ExcelVBA】

コメント

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