こんにちは! ハマラクです。
VBAでデータを扱うためには、型を決めて箱を用意する(変数の宣言)ことが必ず必要となります。ただ、変数のデータ型には種類が多く、最適な型が分からなかったり、もっと使いやすい変数がないかと思うこともあるかと思います。
この記事では、データ型の種類や一行で変数の宣言方法、変数より一段階上の配列について説明したいと思います。この記事を読んでわかることは以下の通りです。
・データ型の紹介とバリアント型の宣言(データ型不要)
・一行で複数の変数を宣言する
・配列の宣言
VBAだけではなくプログラムを組む際には、データをどのように扱うのかが大事になってきます。変数の宣言はデータの取り扱いの初歩となりますので、この記事を読んで理解が深めていただきたいです。
このサイト内の「VBA」タグはVBA初心者が日頃の業務を改善し、自分の時間を作っていくこと応援することを目的に作成しています。
データ型の紹介とバリアント型の宣言(データ型不要)
変数の宣言は「変数名」と「データ型」の指定を行います。実際の文は次のようになります。
Dim 「変数名」 As 「データ型」
変数の宣言については詳しくは次の記事を読んでみてください
・データ型の紹介
データ型によってどんなデータ(数値、文字列など)を扱うのかを決めます。上記の記事では2つの変数について紹介していますが、データ型は複数あります。その一覧が次の通りです。
データ型 | 範囲(扱うデータ) | 記憶領域 |
Boolean | True またはFalse | 2バイト |
Byte | 0 ~ 255 | 1バイト |
Integer | -32,769 ~ 32,767 | 2バイト |
Long | -2,147,483,648 ~ 2,147,483,648 | 4バイト |
LongLong | -9,223,372,036,854,775,808 | 8バイト |
Single | -3.402823E38 ~ -1.401298E-45(負の値) 1.401298E-45 ~ 3.402823E38 (正の値) | 4バイト |
Double | -1.79769313486231E308 ~ -4.94065645841247E-324 (負の値) 4.94065645841247E-324 ~ 1.79769313486232E308 (正の値) | 8バイト |
Currency | -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 | 8バイト |
Decimal | +/-79,228,162,514,264,337,593,543,950,335 (小数点なし) +/-7.9228162514264337593543950335 (小数点以下 28 桁) +/-0.0000000000000000000000000001 (0 ではない最小の値) | 14バイト |
String | 0 ~ 約20億(文字列) | 10バイト+文字列の長さ |
Date | -657,434 (100 年 1 月 1 日) から 2,958,465 件 (9999 年 12 月 31 日) | 8バイト |
Object | 任意の Object 参照 | 4バイト |
Variant(宣言時不要) | なんでも | 数値:16バイト 文字列:22バイト+文字列の長さ |
このようにデータ型の種類はいろいろ在り、扱うデータによって使い分けが必要となってきます。私がよく使うデータ型には色を付けていますので参考にしてみてください。
データ型の一覧をよく見るとなんでも取り扱える「バリアント型」というものがあることに気づいたのではないでしょうか。次にバリアント型について説明いたします。
・バリアント型について
データ型の中でもバリアント型は、「どんなデータでも使用できる」「データ型を省略して宣言することができる」「宣言していない変数も変数として使用できる」というメリットがあります。
例えば、次のような使い方ができます。
Sub バリアント()
Dim a ← データ型を省略した宣言
a = 1000
b = “hogehoge” ← 宣言していない変数の使用
↑扱うデータに区別がない
MsgBox a
MsgBox b
End Sub
このように多くのメリットがあるのように見られますが、デメリットもあります。
・変数の中身が分かりにくくなる (なんでも入るので入力ミスが分かりにくい)
・メモリを多く使ってしまうので実行処理が遅くなる場合がある 特に実行処理が遅くなってしまうのはデータ量が増えていくと致命的になる可能性があるので、なるべく変数はデータ型を指定して宣言する方がいいでしょう。
ではいつバリアント型を使うかというと、私は一時的に変数を使用する場合のみ使用しています。例えば、For文のループ回数を決める変数などに使っています。
バリアント型に限らず、変数宣言はメモリ(データ領域)を予め決めることになりますので、扱うデータが明らかであれば適したデータ型を使用する方がいいでしょう。
では、次に同じデータ型で変数を一行で宣言する方法について紹介します。
一行で複数の変数を宣言する
変数宣言は次のようになります。
Dim 変数名1 As データ型
Dim 変数名2 As データ型
一行で宣言する場合は次のようになります。
Dim 変数名1 As データ型, 変数名2 As データ型
一行で似た役割を持つ変数を固められるため、エラーや変数について確認したいときに調べやすいというメリットがある反面、一行が長くなってしまうので少し見にくくなってしまいます。
一行で宣言する際に次のような宣言を見かけることがあるかと思いますが、注意が必要です。
Dim 変数名1, 変数名2 As データ型
このように宣言したとき変数名2はデータ型で宣言できるのですが、変数名1はバリアント型で宣言されてしまいます。実際のデータ型で確認すると次のようになります。
このようにa,b,dはString型で宣言できていますが、cはバリアント型となっています。このような宣言を使っているプログラムを時々見かけますが、データ型としては誤っていますのでご注意ください。
一行でも宣言できることを紹介しましたが、私はあまり使用しておりません。それは、短縮できるのがDimという部分だけですし、改行して宣言したほうが必要に応じて変数にコメントを付けられるためです。
便利に思える方もいるかと思いますが、時と場合に応じて使用したほうがよいでしょう。
配列の宣言
データを扱うために変数を入れる方法のほかに配列に入れる方法があります。変数宣言ではデータを入れる箱を1つ用意するのに対し、配列は複数の箱をまとめて用意するようなイメージです。
タンスで例えると変数宣言は引き出し一つを用意するのに対して、配列の宣言はタンス自体を用意するような感じです。宣言の方法は次のようになります。
Dim 配列名(用意する個数) As データ型
例:Dim a(3) As Integer
ここで注意が必要なのは配列の番号は0から始まるため、用意する個数=3と宣言すると配列の中身は変数4つ分の箱が用意されます。つまり、例で宣言した配列はデータを4つ入れることができるということになります。
さらに配列は二次元配列、三次元配列と多次元な宣言をすることもできます。
配列はこれまで説明したように変数宣言で扱う箱を複数まとめて宣言する方法になるため、「大量のデータを扱うとき」に使用します。
例えば、次のような場合に使用しています。
・社員のデータをまとめて扱うとき
・案件ごとに売り上げ・利益のデータを扱うとき
などなど…
特にExcelは表(列と行)用いて計算、処理を行うソフトのため配列との組み合わせが抜群にいいです。私は3次元配列を行った場合、1次元目に列、2次元目に行、3次元に判定結果を入れたりします。
変数も配列もデータを扱うために必要になりますので、より良いマクロを組もうと思うと場合に応じて最適なものを選択する必要があります。
終わりに
ここまで「データ型の紹介」「一行で複数の変数を宣言」「配列の宣言」と変数を中心に紹介しましたが、いかがだったでしょうか。データを扱う第一歩は変数・配列戦からになりますので、これからマクロを組む、VBAを書く参考になるでしょう。
今後の記事ではVBAの基礎知識、実践編を紹介していきたいと思います。この記事でVBAに興味を持った方はぜひ読んでいただければと思います。
ここまで読んでいただきありがとうございます。ではまた次回!
コメント