トップ > スキル : アプリケーション > VBA for Access > 応用編(VBA基礎知識)

VBA_Access

変数と定数

プログラミングを記述するには、変数と定数の概念を知っておく必要があります。特に変数は重要な役割を果たし、どのプログラミング言語にも用いられるものです。

変数

データを1件ずつ処理をしたり、ユーザとの対話などで細かな条件を設定するにはプロシージャで「変数」を使う必要があります。

変数とは、プログラムの実行の中で、文字や数値などの情報を一時的に格納するための箱のようなものです。変数の理解をするには、会社のロッカーに例えると分かりやすいです。ロッカーにはいろいろなものを入れることができ、同じものを保管したり、中身を入れ替えることもできます。つまり、ロッカーが変数にあたり、ロッカーの中身が変数の値となります。また、ロッカーを識別するために番号や名前を付けておく必要があります。これが「変数名」と言われるものです。


変数名を付ける際には、次の規則に従う必要があります。

  • 変数名の先頭は数字、記号以外の文字を使用する。
  • 使用できる文字は、英字、漢字、ひらがな、全角カタカナ、数字、アンダースコアです。
  • 変数名にはスペース、ピリオド、感嘆符、そして@、%、&、$、#などは使えません。
  • 文字数は半角255文字以内にする。
  • VBの予約語(関数、ステートメント、メソッドなど)と同じ文字列は使えない。
  • 同一のモジュール内で同じ名前の変数は使えない。

変数に情報(文字列や値など)を格納するには、次のような書式となります。

変数名=格納する情報

この書式内に使われている等号(=)は、等しいという意味ではなく、「代入する」という意味になり、「右辺の情報を左辺の変数という入れ物に代入しなさい」という命令になります。

例)右辺の情報が文字列であれば、ダブルクォーテーション、日付であれば#(シャープ)記号で囲む必要があります。また、数値であればそのままの記述となります。

myMoji = "こんにちは"
myAtai = 5000
myDate = #25/5/2011#

※ 変数名はユーザが自由に付けることができますが、先頭に「my」を付けておく方法があります。これは、VBAの中にmyのつく予約語がないので、予約語を意識しないで名前を付けることができます。

変数の使い方

変数には、文字列や数値だけではなく、プロパティの値や数式の結果を格納することができます。

◆ 変数にプロパティ値を格納する

プロパティの値を変数に直接格納するには次のような書式となります。

変数 = オブジェクト.プロパティ

例)myMoji = Forms![Fメインメニュー]![txtBox1]
例)myTitle = Forms![Fメインメニュー].Caption

また、変数に格納した値をプロパティの値に設定する書式は次のようになります。

オブジェクト.プロパティ = 変数

例)Me![txtBox2].Value = myMoji
例)Me![label1].Visible = myHyouji

例のように変数内の値をプロパティの値に設定できますが、Visibleプロパティは「True」か「False」のどちらかしか設定できないので、myHyouji変数にそれ以外の値が格納されている場合はエラーが発生します。


◆ 数式の結果を格納する

変数には右辺の数式の結果を格納することができます。書式は次のようになります。

変数 = 数式

数式には、算術演算子と変数特有の数式があります。

演算子 説明 結果
+ 加算 A=50+50 100
- 減算 A=50-50 0
* 乗算 A=50*2 100
/ 除算 A=50/2 25
MOD 余り A=50 MOD 8 2
\ A=50 \ 8 6

※ 数式内に( )で囲んだ四則演算式も使用できます。

※ 文字列を連結できる「&」演算子も使用できます。また、「&」の前後には半角スペースを入れます。

例)A = "今日は" & Date & "です。"


数式の中に変数を使用して、再代入することができます。例えば、次のような順番に記述されているとします。

myBoxA = 100 * 2
myBoxB = 10
myBoxC = myBoxA + myBoxB
myBoxC = myBoxC + 200

まず、myBoxAには200、myBoxBには10が代入されます。そして、myBoxCにはmyBoxAとmyBoxBに格納されている値を加算したものが代入されるので、myBoxCには210の値が代入されます。さらに、myBoxCにはmyBoxCに代入されている値210に200を加算した値を再代入する数式なので、最終的にmyBoxCには410の値が格納されていることになります。

このように変数は、値を一時的に格納するような入れ物として扱われ、利便性の高い扱いができます。

変数の宣言

変数は情報を格納するための入れ物ですが、どのような情報を入れる物なのかを指定しておくことで、ユーザのケアレスミスを防ぐことができます。

例えば、変数名を「myMoji」として使う時に、ユーザが記述する際に「myMogi」とスペルミスをしてしまったとします。この場合、このプロシージャを実行しても何も表示されません。

	Sub メッセージ()
		myMoji = "こんにちは"
		MsgBox myMogi
	End Sub
	

変数を利用する場合は、常に変数を使うことを宣言したり、変数に格納するデータ型を指定することで、プログラミングのミスを制御することができます。
変数を宣言するには、Dimステートメントを利用します。

※ その他に、Staticステートメント、Privateステートメント、Publicステートメントなどもあります。

【書式】 Dim 変数名

データ型

変数に格納するデータの種類のことを「データ型」と呼びます。テーブルでフィールドを設定する場合にデータ型を設定しますが、ほとんど同じような意味合いを持ちます。

例えば、数値型のフィールドに文字列を入力するとエラーになり、そのデータ型でサポートする範囲外の値は設定できなくなります。さらにメモリの節約につながり、処理のパフォーマンスも若干向上します。

【書式】 Dim 変数名 As データ型

データ型は省略できますが、その場合はVariant型が自動的に設定されます。

◆ VBAのデータ型
種類 データ型 データ型名 使用メモリ
(Byte)
値の範囲
数値 Byte バイト型 1 0~255
Integer 整数型 2 -32,768~32,767
Long 長整数型 4 約-21億5,000~約21億5,000の整数
Single 単精度浮動小数点数型 4 -3.402823E38~-1.4101298E-45(負の数)
1.401298E-45~3.402823E38(正の数)
Currency 通貨型 8 -9223億3720万3685.4775808
~-9223億3720万3685.4775807
Variant バリアント型 16 倍精度浮動小数点と同じ
その他 Boolean ブール型 2 TrueまたはFalse
Date 日付型 8 西暦100年1月1日~西暦9999年12月31日
Object オブジェクト型 4 オブジェクトを参照するデータ型
String 文字列型 10+文字列の長さ 0~2GB
Variant バリアント型 22バイト+文字列の長さ 文字列型と同じ
◆ 変数の宣言を1行にまとめる

変数を複数宣言する場合、1行にまとめて記述することができます。カンマ「,」で区切って指定しますが、必ずAs データ型は各変数に記述する必要があります。

Dim I As Integer,S As Integer,X As String

例えば、「Dim I,S As Integer」と記述した場合は、変数Iはデータ型が省略されたとみなされて、バリアント型になります。

変数の適応範囲

変数を宣言する場所や宣言に使うステートメントによって、変数の適応範囲が異なります。

◆ プロシージャレベルの変数
  • DimまたはStaticステートメントを使って宣言する。
  • Dimステートメントを使って宣言した変数は、そのプロシージャ内だけで有効で、他のプロシージャから参照することはできない。また、プロシージャが終了すると変数の値は破棄される。
  • Staticステートメントを使って宣言した変数は、そのプロシージャの中だけで有効で、他のプロシージャから参照することはできない。ただし、プロシージャが終了しても、プログラム実行中は変数内の値は保持される。
◆ プロシージャレベルの変数
  • モジュールの宣言セクションでDimステートメントやPrivateステートメントを使って宣言した変数は、そのモジュール全体で使用できる。また代入した値は、プログラムが実行されている間は保持される。
◆ パブリック変数
  • 標準モジュールの宣言セクションでPublicステートメントを使って宣言した変数は、データベース内のすべてのモジュールから参照できる。データベースが実行中は値は保持される。
  • フォーム、レポートのクラスモジュールの宣言セクションでPublicステートメントを使って宣言した変数は、そのフォームやレポートが開いている間は他のモジュールから参照できる。

変数の宣言を強制する

VBは、プログラムの中に新しい変数名を見つけると、自動的にバリアント型の変数として扱うので、宣言していない変数でもエラーにはならないので、ユーザが変数名を誤ってスペルミスをしてもエラーは出ません。このような入力ミスを防止するために「Option Explicitステートメント」をモジュールレベルの宣言として利用します。


変数の宣言の強制は、メニュー[ツール]-[オプション]を選択して、[オプション]ダイアログボックスで設定を行います。

[オプション]ダイアログボックスが表示されたら、[全般]タブの「変数の宣言を強制する」にチェックを入れます。
ただし、すでに作成されているモジュールには適応されません。この設定を行った後のモジュールから有効になります。
チェックを入れたら[オプション]ダイアログボックスは閉じておきます。

新規にモジュールを作成すると、宣言セクションに「Option Explicit」が追加されます。

定数

変数は値が変わる入れ物ですが、定数はあらかじめ決まった値として使います。定数は、途中で値を変えられないのが変数と異なる点です。

例えば、消費税率が5%とした場合に、たびたび消費税0.05を掛け合わせる数式がたくさん存在すると作業が面倒で、しかも消費税率が変更になった場合のプログラムの修正に手間がかかります。

これを消費税率として最初に定義しておけば、その定数を指定するだけで済み、税率が変更になった場合は、その定数の値だけを変更するだけで済みます。定数の書式は次の通りです。

【書式】 Const 定数名 As データ型 = 値


例)消費税率という定数名で、値を0.05と設定する。データ型は単精度小数点数型にします。

Const 消費税率 As Single = 0.05