プログラミング初心者向けのVBA入門講座第9回です。
→過去の入門講座目次はこちら
今回はVBAに限らずプログラミングにおいて重要な要素のひとつである変数について紹介します。
変数を使いこなすことで様々な状況に対応したプログラムの作成が可能になります。
変数とは
変数とはデータ(値)を一時的に保存して好きな時に取り出すことができる記憶領域のことで、よく「データを入れておく箱のようなもの」と例えられます。
変数の宣言
変数を使用する前に「このような変数を使います」と記述します。これを変数の宣言といいます。
変数の宣言にはDimステートメントを使って次のように記述します。
Dim 変数名 As データ型
変数名
変数名は自由に設定できますが、いくつかルールがあります。
- 「_(アンダーバー)」以外の記号は使えない
- 先頭の文字は英字、漢字、ひらがな、カタカナのいずれかでないといけない(数字や「_(アンダーバー)」から始まる名称は使えない)
- 同じ適用範囲で同じ名称は使えない
- 変数名の長さは半角255文字以内
- VBAで使用する特別な用語は使えない。(Sub,Dim,Ifなどはステートメントの一部なので変数名としては使えない)
変数名はできるだけそれをみて意味の伝わる名前にするほうがいいでしょう。
データ型
VBAで扱うデータには整数、日付、文字列などの「データ型」という概念があります。変数を宣言するときもその変数がどのタイプのデータを格納するためのものかをあわせて宣言します。
よく使われるデータ型としては次のものがあります。
- Long(長整数型)
- Double(倍精度小数点数型)
- String(文字列型)
- Date(日付型)
- Boolean(ブール型)
- Object(オブジェクト型)
- Variant(バリアント型)
その他のデータ型とあわせて詳細はこちらを参照ください。
Variant型はすべてのデータ型を格納することができます。宣言するときにはどのデータ型になるかわからない場合はVariant型として宣言しておくと変数を格納したときに自動でデータ型を判別して格納されます。
便利だからといってすべての変数をVariant型で宣言するのはよくありません。整数を扱うとわかっているときはLong型、文字列を扱うとわかっているときはString型など使い分けて宣言するようにしましょう。
またデータ型を省略して
Dim 変数名
と記述するとその変数はVariant型で宣言されたものと見なされます。これについてもVariant型で宣言するならきちんと As Variant と記述するようにしましょう。
変数の宣言を強制する
VBAでは変数の宣言を省略することも可能ですが、変数は必ず宣言してから使うようにしてください。(理由は後述します)
VBEのオプションとして変数の宣言を強制することができます。
デフォルトではこの項目はOFFになっていますが必ず設定するようにしましょう。
VBEのメニュー「ツール」から「オプション」を選択してオプションダイアログボックスを開き、そのなかの「編集」タブにある「変数の宣言を強制する」にチェックをつけます。
「OK」ボタンをクリックするとそれ以降に作成されるモジュールの先頭に「Option Explicit」という文が自動で挿入されます。この文が表示されたモジュールでは宣言をせずに変数を使うことはできなくなります。
変数の宣言を強制にするべき理由
変数の宣言を強制しないと次のような弊害がでます。
たとえば変数として「UserName」という名前の変数を用意してプログラム中に何度か使用していたとします。
そのなかで記述をタイプミスして「UseName」としてしまった場合、変数の宣言を強制していないときにはこれは「新しく用意された変数」と解釈されます。当然変数の中身はそれまでの中身とは違い初期化された値が入ります。
結果、プログラムとしては意図しない結果になりますが、このとき何が原因でそうなったのかを調べてタイプミスの箇所を見つける作業はとても大変なことです。
一方、変数の宣言を強制していればタイプミスした変数は「宣言せずに使おうとした変数」ということでプログラムを実行しようとした時点でコンパイルエラーが発生します。
このときエラー箇所を選択した状態でわかるように表示してくれるのでタイプミスの箇所はすぐに見つけることが可能です。
きちんと変数を宣言してから使用することでプログラムの可読性があがるだけではなく、宣言を強制にすることでタイプミスを検出しやすくなるという利点もあるのです。
変数を使ってみよう
それでは変数を使ってみましょう。
標準モジュールに次のプロシージャを記述して実行してみてください。
Sub Sample1()
Dim rc As Long
Dim ans As Long
rc = InputBox("数値を入力してください")
ans = rc ^ 2
MsgBox rc & "の2乗は" & ans & "です"
End Sub
ここでは変数 rc と 変数 ans の2つの変数をともに Long(長整数)型で宣言しています。
最初に変数 rc に InputBox関数の戻り値を代入しています。
InputBox関数は入力用のダイアログボックスを表示し、ユーザーが入力した値を返します。
次に変数 ans に 変数 rc を2乗した計算結果を代入しています。(「^(キャレット)」は「べき乗」の演算子です)
最後にMsgBox関数で変数に代入された値と文字列を組み合わせた文章を表示させています。
このプログラムでは実行するたびダイアログボックスで入力する値を変えれば計算結果も変わります。
このように入力する値や出力する値が変わっても変数を用いることで同じ記述のプログラムを使用することができます。
実際には今後学習する繰り返し処理や条件分岐のステートメントと組み合わせることでもっと多様な処理ができるようになります。
コメント