[VBA] Array関数でデータを番号付の箱に入れます

 今回は VBA の Array 関数 のサンプルコードで配列変数の基本について学んだ後に、配列を応用して簡単な「くじ引き」マクロを作ってみます。

[VBA] Array関数

 配列変数とは1つ1つのデータを番号付の箱に入れるという概念です。配列を用意する方法はいくつかありますが、VBA で比較的小さな数のデータを扱うときには Array関数 を用いると便利です。まずは簡単なサブルーチンを動かして配列の感覚を掴んでみましょう。

Sub Array_Sample_1()
  Dim mydata As Variant
  mydata = Array("a", "b", "c")
  MsgBox mydata(1)
End Sub

 Array_Sample_1() を実行するとメッセージボックスに「 b 」と表示されます。配列変数は必ず Variant 型で宣言します。Variant 型とはあらゆる種類の型を格納できるデータ型であると同時に、配列を格納できる唯一のデータ型です。3 行目のコード

mydata = Array("a","b","c")

によって、mydata(0), mydata(1), mydata(2) にそれぞれ a, b, c が格納されます。ここで注意しなければならないのは、配列は 0 番からインデックスされてしまうということです。ですから、

MsgBox mydata(1)

と書くと、2 番目の箱に入れられた「 b 」が表示されるのです。この方式がどうも馴染めないという場合はサブルーチンの外に

Option Base 1

と書き込みます。

Option Base 1

Sub Array_Sample_2()
  Dim mydata As Variant
  mydata = Array("a", "b", "c")
  MsgBox mydata(1)
End Sub

 するとメッセージボックスに「 a 」と表示されるようになります。文字 a, b, c が格納される箱がそれぞれ mydata(1), mydata(2), mydata(3) となったからです。
 
 袋の中に「当たり」を 1 つ、「ハズレ」を 3 つ入れて、1/4 の確率で「当たり」を引くプロシージャを Array() を使って実装してみます。

Option Base 1

Sub Kuji()
  Dim ball As Variant
  Dim rd as Integer
  Randomize
  ball = Array("当たり", "ハズレ", "ハズレ", "ハズレ")
  rd = Int(4 * RND + 1)
  MsgBox ball(rd)
End Sub

 Kuji() を実行するとメッセージボックスに「当たり」か「ハズレ」のどちらかが表示されます。何回か試してみると「ハズレ」を引く確率が高くなっていることが分かると思います。

 Kuji() について解説します。前回説明したように

Option Base 1

によって配列のインデックス番号の下限値を 1 に設定し、

ball = Array("当たり", "ハズレ", "ハズレ", "ハズレ")

という記述で ball(1) に「当たり」、ball(2), ball(3), ball(4) にそれぞれ「ハズレ」という文字列を入れています。次にこのインデックス番号を無作為に選択することを考えます。端数を丸めて整数値に変える INT 関数、 0 から 1 までの乱数を発生させる RND 関数を用いると、a ~ b のランダム整数は

Int((a - b + 1) * RND + a)

という記述で得られます。ですから

rd = Int(4 * RND + 1)

と書けば 1 から 4 のランダム整数を変数 rd に入れることになります。rd には 1 から 4 までの数字が入っているので、

MsgBox ball(rd)

とすれば、「当たり」か「ハズレ」のいずれかを無作為に表示することになります。

【次の記事】>> ワークシートに図形を作成します

コメント

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