プチIT化

【VBA】Variant配列の定義の仕方と値の入れ方

こんにちは、わたあめです。今日はVBAのVariant型についての記事です。

悩める人
悩める人
Variant型の配列って定義の時にいつも戸惑う!

という方いませんか?私は、毎度「あれ?Variant型の配列ってどうやって使うんだっけ?」という状態に陥っています。今回は、自分の備忘録も兼ねて、定義サンプルをいくつかまとめていきたいと思います。それでは、いってみましょう!

Variant型の配列の定義サンプル3つ

この記事ではVariant型配列の定義、値の入力方法を3つ紹介していきたいと思います。

全てのサンプルマクロに共通で、最後にVariant配列の中身の結果をイミディエイトウィンドウにでます。イミディエイトウィンドウは、Microsoft Visual Basic for Applicationsの画面上メニューバーの[表示]>[イミディエイトウィンドウ]を選択することで表示できます。

配列にひとつひとつ値を入れる

Variant型配列の配列の部屋にひとつずつ値を入れて定義するサンプルマクロです。

' 配列定義:あらかじめ配列の個数を定義する
Dim arrayData(2) As Variant

' 配列に値を入れる
arrayData(0) = "1"
arrayData(1) = "2022/04/01"
arrayData(2) = "あいうえお"

' 結果をイミディエイトウィンドウに表示する
For i = 0 To UBound(arrayData)
 Debug.Print arrayData(i)
Next

予め3つの部屋を用意しておきます。(arrayData(0),arrayData(1),arrayData(2))そこに、格納したい値をそれぞれ代入します。Variant型なのでどんな型でもOKです。

Array関数をつかってまとめて値を入れる

Variant型の配列に、Array関数を利用してまとめて値を入れるサンプルマクロです。

' 配列定義:あらかじめ配列の個数を定義しない
Dim arrayData() As Variant

' 配列に値を入れる
arrayData = Array("長崎市", "諫早市", "佐世保市")

' 結果をイミディエイトウィンドウに表示する
For i = 0 To UBound(arrayData)
  Debug.Print arrayData(i)
Next

Array関数の中に、カンマで区切り値を指定します。すると、配列の部屋それぞれに区切られた値が入ります。arrayData(0)に長崎市、arrayData(1)に諫早市、arrayData(2)に佐世保市が格納されます。

また、Array関数を使ってArray配列に値を入れる場合、配列の個数は定義せずにおきます。「Dim arrayData(5) As Variant」などと配列の個数を指定してしまうと、「配列に割り当てられません」というエラーとなるので注意が必要です。

For文を使って値を入れる

繰り返し処理であるFor文を使って値を入れるマクロサンプルです。

' 配列定義:あらかじめ配列の個数を定義する
Dim arrayData(10) As Variant

' 配列に値を入れる
For i = 0 To UBound(arrayData)
  arrayData(i) = i
Next

' 結果をイミディエイトウィンドウに表示する
For i = 0 To UBound(arrayData)
  Debug.Print arrayData(i)
Next

arrayDataの0~11の部屋に、カウントアップされていくiの値(0,1,2...10)の値がそれぞれ入いる処理を行っています。

Variant型配列の使用時に出たエラー

Variant型の配列を使用した際に出会ったエラーをまとめておきます。下記に記載する原因以外でも起こることもありますが、私がエラーが出た時の原因を書いておきます。

実行時エラー'9':インデックスが有効範囲にありません

これは、配列個数が足りないときに起こったエラーでした。定義された配列の持っているデータ格納部屋数を超えた場所を参照していました。

例えば、「arrayData(2)」と配列を定義したのに、arrayData(3)を参照するとエラーとなりました。「データがない・参照できる場所がないよ!」というエラーでした。

実行時エラー'13':型が一致しません

これは、変数の定義が間違っていました。例えば、配列として扱うのにDim array() As Variantではなく、Dim array As Variant 括弧がないというケースでした。

さいごに

いかがだったでしょうか?variant型って柔軟性は高いですが、扱いが難しいこともあるなと感じているわたあめです。少しでもマクロ作りの参考になれば幸いです。それでは、また!