VBAの変数宣言

<< 変数とは :前の記事

前回は、変数というものが何なのかについて解説しました。変数は非常に便利なものですので、命名規則や使い方をしっかり覚えましょう。今回は、変数の宣言について解説していきます。

目次

変数のデータ型

変数には、値を入れる箱にデータ型を指定することができます。変数の実体は、パソコンのメモリ上に確保された領域のことで、変数の扱うデータ型によってメモリの領域が異なります。変数のデータ型には以下のようなものがあります。

指定方法データ型バイト数値の範囲
Byteバイト型10~255
Booleanブール型2真(True)又は偽(False)
Integer整数型2-32,768~32,767
Long長整数型4-2,147,483,648~2,147,483,647
Currency通貨型8-922,337,203,685,477.5808~922,337,203,685,477.5807
Single単精度浮動小数点数型4-3.402823E38~-1.401298E-45(負の数)
1.401298E-45~3.402823E38(正の数)
Double倍精度浮動小数点数型8-1.7976931348623E308~-4.94065645841247E-324(負の数)
4.94065645841247E-324~1.79769313486232E308(正の数)
Date日付型8西暦100年1月1日~西暦9999年12月31日
Objectオブジェクト型4オブジェクトを参照するためのアドレス
String文字列型10+文字列の長さ0~2GB
Variantバリアント型16倍精度浮動小数点数型の範囲と同じ
Variantバリアント型22バイト+文字列の長さ可変長の文字列型の範囲と同じ。

それぞれのデータ型にはどのような値を格納するかということが決められていますが、表にもあるようにバイト型は0~255までの数値を、整数型は-32,768~32,767までの数値を格納できます。格納できる数値の範囲が大きくなればもちろんメモリの領域も大きくなり、バイト型が1バイトで済むのに対して整数型は2バイト必要となります。

たとえば、変数aを日にちの数値として利用したい場合、変数aに格納される数値は1~31のいずれかになります。変数aの数値の範囲は1~31ですのでバイト型・整数型のいずれのデータ型にも格納できますが、整数型を選択すると無駄にメモリを消費してしまいます。

今回の例で言えば、バイト数が少ないバイト型を選択する方が正しい選択となります。このように変数にどのような値を格納するかによって正しくデータ型を選択する必要がありますので、データ型を選択する場合は注意しましょう。

変数の宣言

変数のデータ型について解説しますが、データ型を設定するには変数を宣言する必要があります。基本的に変数を宣言する場合は、Dimステートメントを利用します。

Dimステートメントは、変数のデータ型を宣言しメモリ領域を割り当てるステートメントです。以下は宣言する場合の基本的な書き方になります。

Dim 変数名 As データ型

以下の事例を見てみると変数aを文字列型(String)で宣言し、変数aに文字列の「VBA」を格納しています。ちなみに変数aは文字列型(String)で宣言していますので、数値を格納することはできません


Sub sample()

 Dim a As String
    
 a = "VBA"

End Sub

また、宣言は必ずしも必要ではありません。変数宣言を省略した場合は、自動的にバリアント型(Variant)が設定されます。バリアント型(Variant)はどんな値でも格納できる万能なデータ型ですが、その分メモリを多く使用します。

メモリを消費すると実行速度が遅くなる場合もありますので、省略せずそれぞれ適した変数の型を宣言するようにしましょう。

尚、変数に値を格納する場合は、変数名に「=(イコール)」を記述し設定値を代入します。この場合の「=(イコール)」は代入演算子と呼ばれるもので、右辺の値を左辺に代入する役割があります。演算子については、「演算子とは」で詳しく説明していますので、ご確認ください。

複数の変数をまとめて宣言する

基本形の変数宣言は理解できたかと思いますが、複数の変数をまとめて宣言する場合があります。その場合は、以下のような基本形の宣言の後に「,(カンマ)」で区切り、続けて変数を宣言します。

Dim 変数名1 As データ型, 変数名2 As データ型, 変数名3 As データ型

以下は変数aをバイト型(Byte)、変数bを整数型(Integer)、変数cを文字列型(String)で宣言した事例です。


Sub sample()

 Dim a As Byte, b As Integer, c As String
    
 a = 25
 b = 10000
 c = "VBA"

End Sub

間違った変数の宣言

変数の宣言でたまに間違った変数宣言を行っている事例を見かけます。下記はその間違った宣言の事例で、先に変数を「,(カンマ)」で区切りその後にデータ型を記述しています。

見た目は変数a,b,cに整数型(Integer)が設定されているかのように見えますが、実際はAsキーワードの前の宣言した変数cのみが整数型(Integer)で宣言され、変数a,bはバリアント型(Variant)となります。

こちらを処理したとしてもバリアント型はどんな値でも格納できますので、エラーは起こりません。このように知らず知らずの内にバリアント型で宣言してしまっていますので、このようなことにならないよう正しい記述方法を覚えましょう。


Sub sample()

 Dim a, b, c As Integer
    
 a = 25
 b = 100
 c = 10000

End Sub

バリアント型の宣言

ここではバリアント型が具体的にどのようなものなのか、どのような宣言方法があるのかについて解説します。バリアント型では、数値や文字列、日付、時間、ブール値以外にもEmpty値、Null値、エラー値、Nothingなども扱うことができます。Empty値は初期化されていないバリアント型の変数を示し、数値として利用する場合は「0」、文字列とともに使われる場合は、「""」として扱われます。

バリアント型の特徴は代入する値によってデータ型が動的に変更されますが、数値を代入すると16バイトのメモリ領域が、文字列を代入すると文字列に必要なメモリサイズに22バイトを加えたメモリ領域が確保されます。

バリアント型は他の型と比べて特殊ですので、扱いについては十分に気をつけましょう。また、バリアント型の宣言をする場合は以下の3種類があります。

  • 変数の宣言を行わわず利用することでその変数はバリアント型として扱われます
  • DimステートメントなどにAsキーワードを記述して明示的にバリアント型を宣言します
  • DimステートメントなどにAsキーワードを省略するとバリアント型とみなします

変数型宣言のメリット

変数の型宣言をするメリットとしては、以下のようなものが挙げられます。大掛かりなプログラムほどバグを発生させてしまう可能性が高くなりますので、特に「バグが少なくなる」というメリットが大きいです。また、最初から宣言するとバグを見つけやすくなりますので、型宣言は行うようにしましょう。

  • メモリを節約する
  • バグの発生率を下げる
  • 処理速度を上げる
  • 入力支援機能が利用でき、プログラミングがスムーズになる
  • 他のプログラム言語の多くは型宣言が必須なので、習慣づける

また、変数を宣言すると、VBE(Visual Basic Editor)入力支援機能が使えるようになります。オブジェクト名の後に「.(ピリオド)」を入力すると以下のように入力候補が表示されます。

こちらはプロパティメソッドなどのキーワードを全て入力しなくても候補を表示してくれる機能で、入力速度が速くなるのと入力ミスが減るのでバグを減らすことができます。

VBAの入力支援機能

変数の宣言を強制する

変数の宣言はなるべく行いましょうと説明しましたが、宣言を忘れる場合もあります。ExcelのVBAには変数の宣言を忘れないように宣言していない変数を使用できないようにするステートメントがあります。そこで利用されるのがOption Explicitステートメントで、モジュール内のすべての変数に対して、明示的な宣言を強制します。

利用方法については、以下のようにOption Explicitステートメント宣言セクションの先頭に記述します。宣言セクションとは、コードウィンドウの中で一番上のプロシージャよりさらに上部の範囲のことを指します。こちらを設定することで、変数を明確に管理することができます。

Option Explicit ステートメント

ちなみに、こちらを毎回モジュールの先頭に書くのは手間ですので、VBEの設定で自動的に記述することも可能です。方法としては、VBEの「ツール」メニュー→「オプション」を選択します。次に「オプション」ダイアログの編集タブの中に「変数の宣言を強制する」という項目があるので、そちらにチェックを付けます。これによりモジュールを追加した際に自動的に「Option Explicit」を記述することができます。

Option Explicitステートメントの設定

Option Explicitステートメントを利用すると変数の入力ミスや使用されていない変数を記述した場合、実行するとコンパイルエラーで「変数が定義されていません。」とエラー表示してくれるので、簡単にバグを見つけることができます。

コンパイルエラー

まとめ

今回は、変数の宣言について解説しました。変数を宣言する方法や必要性が理解できたかと思います。次回は、各データ型の特徴と変数宣言について、事例を交えて解説していきます。

次の記事: 各データ型の特徴と変数宣言 >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

  • このエントリーをはてなブックマークに追加
ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。