[VBA] 配列変数の基本を学びます

 今回は 配列変数 の基本について学んだ後に、配列を応用して簡単な くじ引きマクロ を作ってみます。
 

Array関数

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

 Sub Sample()

 Dim mydata As Variant

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

 MsgBox mydata(1)

 End Sub

 マクロを実行するとメッセージボックスに「 b 」と表示されます。

Variant型で宣言します

 配列変数は必ず Variant型 で宣言します。 Variant型とはあらゆる種類の型を格納できるデータ型であると同時に、配列を格納できる唯一のデータ型です。

0 番からインデックスされます

 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 Sample()

 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 の確率で「当たり」を引くマクロです。

 Option Base 1

 Sub くじ引き()

  Dim ball As Variant
  Dim rd as Integer

  Randomize

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

  rd = Int(4 * RND + 1)

  MsgBox ball(rd)

 End Sub

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

Variant 型変数に配列を入れます

 前回説明したように

Option Base 1

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

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

という記述で ball(1) に「当たり」、ball(2), ball(3), ball(4) にそれぞれ「ハズレ」という文字列を入れています。

1 から 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)

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


 

コメントをどうぞ

メールアドレスが公開されることはありません。