お知らせ
こちらの記事は、電子書籍「難しく考えないExcel VBA基礎学習編」として出版されました。記事は途中までが試し読みの対象となります。
Excel VBA 制御構文
制御構文ってなんだ?
プログラムでは、「記述された内容を順番に処理させたい場合」や、「ある一定の条件下でのみ処理させたい場合」、「同じ命令を繰り返して処理させたい場合」、「ある処理から別の処理を呼びだしたい場合」などがあります。
通常プログラムは書かれた内容を上から順番にひとつずつ処理する仕組みとなっているので、それ以外の動きを持たせたい場合には、その動きを行わせる専用の記述が必要になります。
このうち「記述された内容を順番に処理させるパターン」、「ある一定の条件下でのみ処理させるパターン」、「同じ命令を繰り返し処理させるパターン」は基本制御構造と呼ばれ、それぞれ「順接(順次)構造」「選択構造」「反復構造」と呼ばれます。
そして、この制御構造を実現するためのプログラムの文が「制御構文」と呼ばれます。
構造化プログラミング
構造化プログラミングはプログラムを3つの基本構造(順接、選択、反復)で組み合わせて記述する方法です。このうち、「順接」は上から順番に命令が行われるものです。その他に条件の成立・不成立によって処理を選択する「選択(条件分岐)」と条件の成立・不成立によって処理を反復する「反復(繰り返し)」があります。

選択構造と反復構造についてVBAでは「If文」「Select文」「For文」「Loop文」を利用して実現することができます。
Excel VBA 制御構文の種類
ここでは、プログラムを模写(書き写すこと)して、実行し動きを確認するだけの学習を行います。細かな文法などは後の記事で扱います。
条件分岐(選択構造)
VBAの制御構文のうち条件分岐に関しては【If Thenステートメント】と【Select Caseステートメント】の二種類が存在します。
IF – Then ステートメント
構文 | If 条件 Then 条件に合ったときの処理 End If |
サンプルプロシージャ
Option Explicit
Sub conditionalBranchIf()
Dim age As Byte
On Error GoTo ErrorSample
age = InputBox("あなたの年齢を入力して下さい")
If age >= 20 Then
MsgBox age & "ですね。お酒の購入をしていただけます。"
Else
MsgBox age & "ですね。お酒の販売はできません。"
End If
Exit Sub
ErrorSample:
MsgBox "年齢を正しい形式で入力してください。"
End Sub
実行結果
プログラムを記述したら以下の手順でプログラムを動かします。
- プロシージャ内にカーソルを置きます。(プロシージャ内をクリック)
- ツールバー内の「▶」をクリックします。

インプットボックスが表示されます。色々な値を入力して動きを見ることが出来ます。

Select – Case ステートメント
構文 | Select Case 条件 Case 条件1 処理1 Case 条件2 処理2 Case 条件3 処理3 Case Else 処理4 End Select |
サンプルプロシージャ
Sub conditionalBranchSelect()
Dim Department As String
Department = InputBox("部署を入力して下さい" & vbLf & _
vbLf & _
"経理部" & vbLf & _
"営業部" & vbLf & _
"企画部" & vbLf & _
"開発部")
Select Case Department
Case "経理部"
MsgBox "経理部ですね。本日のMTGはAM10:00からです。"
Case "営業部"
MsgBox "営業部ですね。本日のMTGはAM13:00からです。"
Case "企画部"
MsgBox "企画部ですね。本日のMTGはAM15:00からです。"
Case "開発部"
MsgBox "本日はMTGはありません。"
Case Else
MsgBox "正しい部署を入力してください。"
End Select
End Sub
実行結果
プログラムを記述したら以下の手順でプログラムを動かします。
- プロシージャ内にカーソルを置きます。(プロシージャ内をクリック)
- ツールバー内の「▶」をクリックします。

インプットボックスが表示されます。色々な値を入力して動きを見ることが出来ます。

繰り返し(反復)
制御構文のう繰り返し文に関しては大きく分けて【For Nextステートメント】と【Do Loopステートメント】の二種類が存在します。
For – Next ステートメント
構文 | For カウンタ変数 = 初期値 To 終了値 (Step 値に対する幅) 処理 Next (カウンタ変数) |
サンプルプロシージャ
Sub conditionalBranchFor()
Dim i As Integer
For i = 1 To 5
MsgBox i & "回目の表示です。"
Next i
End Sub
実行結果
プログラムを記述したら以下の手順でプログラムを動かします。
- プロシージャ内にカーソルを置きます。(プロシージャ内をクリック)
- ツールバー内の「▶」をクリックします。

MsgBoxがカウント回数分表示されます。

Do – Loop ステートメント(Do While – Loopステートメント)
構文 | Do While 条件 処理 Loop |
例文
Sub conditionalBranchWhile()
Dim i As Integer
i = 1
Do While i <= 5
MsgBox i & "回目の表示です。"
i = i + 1
Loop
End Sub
実行結果
プログラムを記述したら以下の手順でプログラムを動かします。
- プロシージャ内にカーソルを置きます。(プロシージャ内をクリック)
- ツールバー内の「▶」をクリックします。

Forステートメント同様にMsgBoxがカウント回数分表示されます。

この記事の試し読みはここまでとなります。
…
…
…
今回は以上となります。

ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

