こんにちは、ヒガシです。
今回はVBAにおける配列の概念をご説明しようと思います。
VBAで複雑な処理を行っていると変数が多くなりすぎてややこしくなることってありますよね。
そんなとき、今回の記事で紹介する配列の概念を知っておけば、ある程度変数を整理できるようになります。
初心者向けに事例を用いて詳細解説していきますので、ぜひ最後までご覧ください。
それでは早速やっていきます!
配列とは
まずはじめに今回の記事の主人公である配列についてご紹介していこうと思います。
一般的にVBA上で変数にある値を代入しようとする場合、一つの変数に一つのデータしか入れることができません。
a=10
って感じですね。
また、すでにデータが入っている変数に新たにデータを入れなおした場合、最初に入っていたデータは消し去られてしまいます。
つまり、
a=10
a=20
とした場合、最終的にaには20が入っているということです。
ここまでが一般的な変数です。
次に変数を配列化するとどのようなことができるかを説明します。
変数を配列化することで、一つの変数の中に複数のデータを代入できるようになります。
a(1)=10
a(2)=20
としたとき、aの中には10 と20どちらも入っているということです。
このように、複数のデータを一つの塊として取り扱うことができるのが配列です。
もちろん、通常の変数のように一度入れてしまったデータを書き換えることも可能です。
つまり、
a(1)=10
a(2)=20
a(2)=30
とすると、aの中には10 と30というデータが入っていることになります。
ここまでがざっくりとした配列の概念説明になります。
配列が役に立つ状況
次に配列がどんな状況で役に立つのかをご紹介しようと思います。
例えば、ある人のテストの点数を集計するとしましょう。
テストの項目とテストの点数に対して変数を作る場合、
kyouka1=”国語”
kyouka2=”算数”
kyouka3=”理科”
score_kyouka1=92
score_kyouka2=85
score_kyouka3=95
という形で一つ一つを変数化していく必要が出てきます。
こんなとき配列を使うことでこれらすべての変数をひとまとめにすることができ、かつそれらをエクセルシート上に出力することも非常に簡単になります。
これなら、変数をわざわざたくさん準備する必要はなく、【Aさんのテスト結果】というような配列変数を準備してあげれば済むわけです。
ざっくりと配列について説明してきましたが、実際の使用例を見るのが一番わかりやすいと思います。
というわけで、ここからはVBA上での配列の使用方法についてご紹介していきます。
配列をつくる方法
変数を配列として扱うには、まずは配列の大きさを決めてあげる必要があります。
先ほどのテストの点数を例にあげて、考えてみましょう。
今回は2行×3列のデータをまとめて取り扱いたいので、この表をまるごと取り扱うためには、2×3の配列が必要になります。
この配列を準備する方法は以下の通りです。
Dim 配列名(1, 2) As Variant
配列名:自分で決める配列の名前
(1,2):配列の大きさ(今回の場合は2×3)
「・・・ちょっと待って。なんで(2,3)じゃなくて(1,2)なの? 」
と思った人も多いのではないでしょうか?
VBAに限らず、多くのプログラミング言語では、1番最初を0にするというルールがあります。
この配列に関してもそのルールが適用されているため、
0,1⇒2行
0,1,2⇒3列
ということになっています。
どうしてもこのルールが気持ちわるいという人はプログラムを記述する前に
Option Base 1
というコードを記述することで、1を基準として取り扱いに変更することができます。
⇒ここに関しては後程くわしくご紹介します。
いずれにせよ、配列を作るときは
Dim 配列名(*, *) As Variant
という形であるということを覚えておきましょう。
※Variantは変数の型を決めているものです。ここはIntegerとかStringにすることもありますが、まぁよくわからない人はVariantにしておけばOKです。
配列にデータを入れる方法
配列の作り方がわかったとことで、次は配列にデータを入れる方法をご紹介します。
基本的に配列にデータを代入する方法は以下の通りです。
配列名(*,*)=入れたいデータ
配列名:事前につくっておいた配列
(*,*):データを入れる場所(行と列を示すもの)
ここでも先ほど同様に以下の事例をベースにご説明すると、
配列名(0,0)=”国語”
配列名(1,0)=92
とすると以下の画像の1列目のデータを代入できるというわけです。
基本的にはたったのこれだけです。
ここでも0を1行目、1列目として扱うことに注意してください。
※Option Base 1を記述している場合は、1が1行目、1列目になります。
VBAでの実際の使用例
最後に実際のVBAコードをご紹介していこうと思います。
やっていることはここまでの説明に取り上げてきた事例そのものです。
Sub list_test1()
'配列を準備する
Dim list_sample(1, 2) As Variant
'配列に値を入れていく
list_sample(0, 0) = "国語"
list_sample(0, 1) = "算数"
list_sample(0, 2) = "理科"
list_sample(1, 0) = 92
list_sample(1, 1) = 85
list_sample(1, 2) = 95
'配列をエクセルシートに出力する
Range("B2:D3") = list_sample
End Sub
ここまでに紹介してきたことをふまえてコードを見ていくと、
配列を準備
⇒配列にデータ代入
⇒エクセルシートに配列データを出力
という流れになっていることがわかると思います。
このVBAコードを実行すると、エクセル上には以下のような結果が出力されます。
きちんと配列に代入したデータが出力されていますね。
また、記事の途中で、配列を0を基準とするのではなく、1を基準として取り扱いたい場合はOption Base 1というコードを記述すればよいという話もしました。
その場合はどうゆうコードになるかも掲載しておきますので、こちらもあわせてご確認ください。
※やっていることは全く同じです。
Option Base 1
Sub list_test2()
Dim list_sample(2, 3) As Variant
list_sample(1, 1) = "国語"
list_sample(1, 2) = "算数"
list_sample(1, 3) = "理科"
list_sample(2, 1) = "92点"
list_sample(2, 2) = "85点"
list_sample(2, 3) = "95点"
Range("B2:D3") = list_sample
End Sub
こっちの方が直観的でわかりやすいかもしれませんね。
おわりに
というわけで今回はVBAにおける配列の概念&使い方についてご紹介しました。
今回の事例だけを見ると配列を使う意味がよくわからなかったかもしれませんが、配列はマスターすればコードの記述量を大幅削減できます。
ぜひ業務において積極的に使っていきましょう。
このように私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
・日々の残業時間を減らしたい。
・業務をもっと効率的にこなしたい。
・もっと勉強する時間を作りたい。
こんな思いを持っている人は、ぜひ他の記事も見てみてくださいね。
この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント