トップ > スキル : アプリケーション > VBA for Access > 基礎編(VBAの基本構成)

VBA_Access

VBAの基本構成

VBAは、コードと呼ばれるプログラミングで記述します。その構成要素を説明する際に、プロシージャ、モジュール、ステートメント、変数などのような用語が使われます。

プロシージャ

プロシージャ (procedure)とは、プログラミング言語において複数の処理を一つにまとめたものです。プログラム内で繰り返し出現する処理を行なうために、一連の命令を一つの手順としてまとめたものです。「手続き」とも呼ばれ、プログラム内部での処理単位の一つとして扱われます。プロシージャを実行することを「プロシージャを呼び出す」と言います。プログラムの中で何度も同じような処理を行なう場合、それをプロシージャとしてまとめておけば何度も同じ処理を記述する必要がなくなるので、手間が軽減され、後の修正も容易になります。

プロシージャを構成する1行ごとのコードを「ステートメント」(命令構文)といい、その中はプロパティやメソッドで構成されています。次のイベントプロシージャでは、OpenFormメソッドを使って[frm_受注]フォームを開きます。

	Private Sub OpenOrders_Click()
		DoCmd.OpenForm "frm_受注"
	End Sub
    

プロシージャは大きく2種類に分かれます。

イベントプロシージャ

イベントプロシージャとは、特定のオブジェクトに付随するイベントに応答して実行するプロシージャのことを言います。例えば、以下のプロシージャが該当します。

  • フォーム開くイベントプロシージャ
  • コマンドボタンのクリック時イベントプロシージャ
  • レポートを閉じる時のイベントプロシージャ

ジェネラルプロシージャ

ジェネラルプロシージャとは、Access全体に影響を及ぼすことのできる独立したプロシージャのことを言います。SubプロシージャとFunctionプロシージャ、クラスプロシージャ の3種類があります。

Subプロシージャは、操作を実行しますが、値を返しません。独自のSubプロシージャを作成することも、Accessによって作成されたイベントプロシージャのテンプレートを使うことも可能です。

Functionプロシージャは、通常では関数と呼ばれ、計算結果などの値を返します。Visual Basic には、現在の日時を返すNow関数など、多くの組み込み関数があります。これらの組み込み関数に加え、独自の関数を作成することができます。

例)メッセージボックスを開くプロシージャ

以下のSubプロシージャを実行すると、現在時刻をメッセージボックスに表示します。

	Sub SamplePro()
		MsgBox "現在時刻 : " & Time()
	End Sub
    	

一つのプロシージャは処理を行ううえでは1単位となります。原則としてプロシージャは内に記述されている行は、上から順にすべて実行されます。
ただし、記述されたいる記号によっては、次のように処理されます。

アポストロフィ(')・・・アポストロフィが行頭にある行は、その行末までコメントとして扱われ、処理上では無視されます。コメントは、全体または特定の箇所に対する説明文のようなもので、後からメンテナンスを行うときや制作者以外に処理内容を確認できるようにしておく注釈となります。コメント行があると、内容を把握しやすくなります。

コロン(:)・・・行頭からコロンまでを「ラベル」といいます。ラベルは、その行をマークするしおりのようなもので、ラベル自体は処理の対象となりません。エラーが発生した時のジャンプ先として行を指定する場合に、ラベルを設定します。

インデント、空白・・・記述するときに、インデント(字下げ)や空白行を入れることで、コード全体が見やすくなります。このインデントや空白行も処理としては意味を持たないのでむしされます。見やすいプログラムを記述するには不可欠なものです。

モジュール

モジュールとは、1単位にまとめられて保存されているVisual Basic for Applicationsの宣言とプロシージャの集まりのことです。プロシージャを格納するための入れ物と考えると分かりやすいでしょう。
モジュールには、クラスモジュールと標準モジュールの2種類があります。モジュールの各プロシージャは、Functionプロシージャか、または Sub プロシージャになります。

標準モジュール

標準モジュールには、ほかのオブジェクトに関連付けられていない標準プロシージャと、データベースの任意の位置から実行可能で頻繁に使用されるプロシージャが含まれます。

宣言

モジュール、プロシージャ内で使用する名前(変数)や、モジュール内の環境、規則を定義することを「宣言」といいます。通常は、プロシージャの最初または、コードの最上位に記述します。

ステートメントの記述方法

処理を実行させるためのステートメントは、「オブジェクト」、「メソッド」、「プロパティ」から構成されます。

オブジェクト

処理の対象となるものを「オブジェクト」、複数の同種類のオブジェクトを含むものを「コレクション」といいます。アプリケーションを構成する一つひとつの要素がオブジェクトです。
Accessにおいてオブジェクトとは、テーブルやレコード、フォームやレポートなどの対象物を指すことになります。

メソッド

メソッドとはオブジェクトに対して操作する際に指定します。また、メソッドはメンバ関数と呼ばれることもあり、関数と同じように引数を指定する場合もあります。
「車を運転する」ということで例えると、「車」がオブジェクトで「運転する」がメソッドになります。メソッドとは動作となります。
メソッドの種類によっては、実行する際にいくつかの情報を必要とするものがあります。これらの情報を「引数」といいます。引数は、指定しなければならないものと、省略ができるものがあります。オブジェクトに対するメソッドや引数の記述方法は以下の通りです。

[コレクション]オブジェクト名.メソッド 引数1、引数2・・・

プロパティ

プロパティとはオブジェクトの属性情報を指します。オブジェクトの属性情報に変更を加えることによりオブジェクトの状態・形状が変化します。
「車のドア」ということで例えると、「車」がオブジェクトで「ドア」が「プロパティ」になります。プロパティとは属性(性質)です。ただ、オブジェクトを特徴づける値を持っており、値を代入することで各設定を変更することができます。
プロパティに値を代入するステートメントは以下のように記述します。

[コレクション]オブジェクト名.プロパティ = 値

変数

変数とは、数値や文字列などを格納するための領域(入れ物の役割)です。変数を宣言後、値を代入したり変数に代入した値を取り出したりすることができます。
変数は、通常モジュール内、またはプロシージャ内で、変数名とデータ型を宣言します。宣言方法は以下のようになります。

変数宣言

処理の対象となるものを「オブジェクト」、複数の同種類のオブジェクトを含むものを「コレクション」といいます。アプリケーションを構成する一つひとつの要素がオブジェクトです。
Accessにおいてオブジェクトとは、テーブルやレコード、フォームやレポートなどの対象物を指すことになります。

Dim 変数名 As データ型

以下の例では変数iに10を代入して、変数を10で乗算して変数に再代入しています。

	Sub Sample()
		Dim  i  As  Integer
		i = 10
		i = i * 10
		Msgbox  i
	End Sub
    

データ型

データ型とは、プログラムにて扱うデータの種類のことをいいます。変数に対してデータ型を宣言することで格納するデータを制限することができます。データ型を変数に対して指定しない場合、自動的にバリアント型(Variant型)が割り当てられます。
条件式で値を比較する場合には以下の演算子を使用します。

データ型 名称 範囲
Byte バイト型 0 ~ 255
Integer 整数型 -32,768 ~ 32,767
Long 長整数型 -2,147,483,648 ~ 2,147,483,647
Single 単精度浮動小数点型 -3.402823E38 ~ -1.401298E-45(負の値)
1.401298E-45 ~ 3.402823E38(正の値)
Double 倍精度浮動小数点型 -1.79769313486232E308 ~ -4.94065645841247E-324(負の値)
4.94065645841247E-324~1.79769313486232E308(正の値)
Currency 通貨型 -922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
Char 文字列型 最大約20億文字まで
Date 日付型 西暦100 年1月1日~西暦9999年12月31日までの日付と時刻
Object オブジェクト型 オブジェクトを参照するデータ型
Variant バリアント型 可変長の文字列型の範囲と同じ。
Boolean ブール型 真 (True) または偽 (False)