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】
コメント