トップ > スキル : アプリケーション > VBA for Access > 基礎編(さまざまなステートメント構文)

VBA_Access

さまざまなステートメント構文

VBAで使用するステートメントには、条件分岐、繰り返し処理などがあります。

条件分岐処理

If~Thenステートメント

ある条件を与え、その条件が満たされた場合に処理されるステートメントがIf~Thenステートメントです。

	If  条件式  Then
		条件式が真(True)のときに実行する時の処理
	End If
    
<実施練習>

◎入力ボックスが表示され、入力された値が「5」以上の時に、メッセージボックスが表示されるプロシージャを記述します。

記述したら実行します。
入力ボックスが表示されたら5以上の数値を入力して[OK]ボタンをクリックします。

メッセージボックスが表示され、5以上の数値が入力されたメッセージが表示されます。
[OK]ボタンをクリックしてプロシージャを終了します。
もし、5未満の数値が入力されたら、何も処理をせずにプロシージャは終了します。

If Then Elseステートメント

If~Thenステートメントに「Else」を組み合わせることで、条件に当てはまらない場合の処理を指定できます。

	If  条件式  Then
		条件式が真(True)のときに実行する時の処理
	Else
		条件式が偽(False)のときに実行する時の処理
	End If
    
<実施練習>

◎性別を問われる質問メッセージが表示され、「はい」をクリックした時と「いいえ」をクリックした時に異なるメッセージを表示するプロシージャを記述します。

記述したら実行します。
質問メッセージが表示されます。

それぞれ、[はい][いいえ]をクリックして表示されるメッセージが異なることを確認してください。

If Then ElseIfステートメント

If Then Elseステートメントの応用で,複数の条件判断をする場合にはElseIf~Then節を使います。ElseIf~Then節はいくつでも記述できます。

	If  条件式1  Then
		条件式1が真(True)のときに実行する時の処理
	Elseif  条件式2  Then
		条件式2が真(True)のときに実行する時の処理
	Else
		いずれの条件式にも当てはまらないときに実行する処理
	End If
    
<実施練習>

◎質問メッセージが表示され、入力された数値によってメッセージが異なるプロシージャを作成します。

記述したら実行します。
質問メッセージが表示されます。自分の習得度を100以内で入力します。

「50」と入力された場合、右のようなメッセージが表示されます。
入力する数値を変えて実行を試してください。それぞれ異なるメッセージが表示されることを確認しましょう。

Select~Caseステートメント

Select~Caseステートメントは、IF文と同じように複数の条件がある場合に使用します。条件式にしたがって各ステートメントブロックに処理を分岐します。Case節はいくつでも記述できます。
If~Thenステートメントとの違いは、処理の分岐が多いほど記述が簡潔で分かりやすいコードになります。また、実行するコードが少ない分、Select~Caseステートメントの方が処理速度も向上します。

	Select~Case  条件式
		Case  条件1
			条件式と条件1が一致するときに実行する処理
		Case  条件2
			条件式と条件2が一致するときに実行する処理
		Case  条件3
			条件式と条件3が一致するときに実行する処理
		Case  Else
			値が上記のどの条件にも当てはまらないとき実行する処理
	End Select
    

Case節の書き方には注意をする必要があります。次のような記述方法となります。

値が1,2,3のいずれかである場合 Case 1,2,3
値が1から5までの範囲のどれかである場合 Case 1 To 5
値が1,2か5から10までの範囲のどれかである場合 Case 1,2,5 To 10
値が10以上の場合 Case Is>=10
値が a~ z Case "a" to "z"
<実施練習>

◎先ほどのIf~Then~ElseIfステートメントの同様の質問メッセージが表示され、入力された数値によってメッセージが異なるプロシージャを作成します。

記述したら実行します。
質問メッセージが表示されます。自分の習得度を100以内で入力します。結果は、先ほどと同じ結果になることを確認します。

繰り返しの処理

For~Nextステートメント

For~Nextステートメントは指定された回数だけ繰り返し処理を行います。

	For  カウンタ=初期値  To  最終値  [Step 増分]
		繰り返し実行する処理
	Next  [カウンタ]
    

Stepにはカウンタに加算される値を指定します。省略した場合、増分は1になります。強制的にループから抜け出すにはExit Forステートメントを使用します。For~Nextループの中にFor~Nextループを組み込む構造(ネスト構造)にすることができます。

<実施練習>

◎1から5まで順に表示するメッセージがでるようなプロシージャを作成します。

記述したら実行します。
最初は「1」と表示され、[OK]ボタンを押すたびにカウントアップされ「5」まで表示されたら終了します。

また、カウントダウンする方法は、Step節を加えて初期値を多く、最終値を小さくします。

Do~Loopステートメント

Do~Loopステートメントは指定した条件が真(True)の間、または真になるまで処理を繰り返したい場合に使います。また、前判断と後判断を行うことができ、ループ条件としてUntil(条件式を満たすまで)またはWhile(条件式を満たしている間)を組み合わせることができ、4種類のフロー制御ができます。ループを強制的に抜けるにはExit Doステートメントを使用します。

ステートメント 条件判断 繰り返し処理
Do While~Loop ループの前で条件判断 条件が満たされている間は処理を繰り返す
Do~Loop While ループの後で条件判断
Do Until~Loop ループの前で条件判断 条件が満たされるまで処理を繰り返す
Do~Loop Until ループの後で条件判断

前判断とは,繰り返し実行する処理を行う前に条件を判断して処理を行うことです。条件式によっては、一度もループに入らず処理を終了することがあります。
後判断では、繰り返し実行する処理を必ず1回は実行します。

Do Until~Loopステートメント(前判断)
	Do  Until  条件式
		繰り返し実行する処理
	[Exit Do]
	Loop
    
<実施練習>

◎1から10までの数値を合計するプロシージャを作成します。

実行すると、結果が「55」と表示されます。条件が満たされているかどうかを最初に判断して、満たされるまで処理を繰り返し行います。


Do~Loop Untilステートメント(後判断)
	Do
		繰り返し実行する処理
	Loop  Until  条件式
    
<実施練習>

◎1から10までの数値を合計するプロシージャを作成します。

実行すると、結果が「55」と表示されます。条件が満たされているかどうかを処理の後に判断して、満たされるまで処理を繰り返し行います。ただし、最初の1回は必ず処理されます。


Do While~Loopステートメント(前判断)
	Do  While  条件式
		繰り返し実行する処理
	[Exit Do]
	Loop
    
<実施練習>

◎1から10までの数値を合計するプロシージャを作成します。

実行すると、結果が「55」と表示されます。条件が満たされているかどうかを最初に判断して、満たされている間は処理を繰り返し行います。


Do~Loop Whileステートメント(後判断)
	Do
		繰り返し実行する処理
	Loop  While  条件式
    
<実施練習>

◎1から10までの数値を合計するプロシージャを作成します。

実行すると、結果が「55」と表示されます。条件が満たされているかどうかを処理の後に判断して、満たされている間は処理を繰り返し行います。ただし、最初の1回は必ず処理されます。

前判断と後判断の違い

前判断と後判断の違いを実際に感じることができます。通常は、どちらの繰り返しもさほど違いがありませんが、次のような記述をすると違いが分かります。

まず、前判断としたDo While~Loopステートメントで、最初に入力ボックスを表示させ、入力された数値を1つずつカウントダウン表示させるプロシージャを作ります。

実行するときに、入力ボックスに「0」と入力して実行させます。

前判断の条件は「0より大きい」ということなので、最初から満たされていません。よって、何も処理されないまま終了します。
次に後判断としたDo~Loop Whileステートメントで、同じ内容のプロシージャを作ります。

実行するときに、入力ボックスに「0」と入力して実行させます。

前判断の条件はないので、かならず1回はメッセージを出すことになります。この時の数値は「0」なので、「0回」と表示されます。処理された後に、判断しますが、この時「0より大きい」という条件が満たされていないので、処理は終了します。

使い分けとしては、条件に関係なく必ず最初は処理を行いたい時は、後判断のステートメントを使うことになります。