【Excelマクロ(VBa)】[変数]配列について


 配列とは


変数は「定義した文字(変数)に可変する色々な値を一時的に保管する入れ物」であり「型が重要」と説明しました。(「定数と変数について」参照)

例えば3人[定数]のテストの点数を変数に入れて平均(整数)を出す場合、変数をどのように定義したら良いでしょうか?

何も考えずに機械的に変数を定義するならば、下記の様に記載するかもしれません。

Const cnstNumber As Integer = 3 '[定数]人数
Dim int1, int2, int3 As Integer '[変数]3人のテストの点
Dim intAverage As Integer '[変数]平均

人数が増えるだけ変数が増えるとすると、処理が非常に大変でミスが発生しやすくなります。

上記の例で10人分の処理をしようと変数の定義をすると以下のようになります。100人だと書ききれません。

Const cnstNumber As Integer = 10 '[定数]人数
Dim int1, int2, int3, int4, int5, int6, int7, int8, int9, int10 As Integer '[変数]10人のテストの点(増加分)
Dim intAverage As Integer '[変数]平均

このような場合に配列を使い「テストの点」という10個の入れ物(変数)を用意します。記述の仕方は下記の通りで括弧()の中に10と書きます。

Dim intTestPoint(10) As Integer '[変数]10人のテストの点


しかし、使い方は下記のように0から開始するので9で終わります。

intTestPoint(0) = 10 '1人目のテストの点
intTestPoint(1) = 20 '2人目のテストの点
intTestPoint(2) = 30 '3人目のテストの点
  ・
  ・
intTestPoint(9) = 100 '10人目のテストの点


 配列によるメリット


変数を配列にする事で、変数定義が楽になるだけではなく、実際の処理も非常に効率が良くなります。

平均を求める処理だったので10人の場合の処理を書くと下記のようになります。

▽ 配列を使わない場合
'10人のテストの平均点(整数)
intAverage = (int1 + int2 + int3 + int4 + int5 + int6 + int7 + int8 + int9 + int10) / cnstNumber

▽ 配列を使った場合(ループ処理に使っている intLoopCNT は別途変数定義が必要)
'10人のテストの合計点
for intLoopCNT = 0 to cnstNumber - 1
  intAverage = intAverage + intTestPoint(intLoopCNT)
next intLoopCNT

'10人のテストの平均点(整数)
intAverage = intAverage / cnstNumber

初心者には「配列を使わない場合」の方が単純に見えるかもしれませんが、人数が増えれば変数が増えてプログラムの修正が多く発生しますので、プログラムの拡張性も損なわれます。

是非配列の使い方を覚えて活用しましょう。



管理人 について

趣味:映画鑑賞・音楽鑑賞・ゲーム・旅行 仕事:会社員(IT関連)
カテゴリー: VBa(Excelマクロ), システム開発 パーマリンク

コメントを残す