[Excel で VBA] If 文

今回は If 文を学ぶ。
前回までのプログラムは常に一本道であったが、If 文を学ぶと 状況に応じて処理が分岐するプログラムを記述できるようになる。

なお、If 文にはバリエーションがあり、Else を使う場合、ElseIf を使う場合などがある。

本ページの内容を学び始める前に

本ページの内容を学び始める前に、まず Excel で以下のプログラムを実行できる状態にしよう。
このプログラムの動作確認をしながら、本ページの解説を読んでいくのである。

Sub prog()
Dim x As Integer

    x = InputBox("整数を入力してください")

    If x > 5 Then
        MsgBox "あなたの入力した数字は5より大きいですね"
    End If
End Sub

さて、上記のコピー可能なプログラムを Excel 上の VBA で実行する方法は 第一回課題のページを参考にすること。
上のプログラムをコピーしてを VBA のプログラム記述欄に貼り付けてみよう。

貼り付け後の状態が下図である。



この状態ができたら、プログラムを実行してみよう。
実行方法も第一回のページで解説されているのだった。

すると、「整数を入力してください」というウインドウが現れる。
これはプログラム中の「x = InputBox("整数を入力してください")」という行の効果で、
皆さんがキーボードで入力した数値が変数 x に格納されることになる。



ここに整数を入力するのだが、下図のように英語を入力するモードで整数を入力すること!
日本語入力モードで整数を入力してはならない。




例えば、5より大きな整数として6を入力して OK ボタンをクリックしてみよう。
以下のように「あなたの入力した数字は5より大きいですね」という MsgBox が現れる。



MsgBox の OK ボタンをクリックしてプログラムを終了したら、このプログラムをもう一度実行してみよう。
そして、次は 5 以下の整数として 4 を入力してプログラムを実行してみよう。

今度は MsgBox が現れない。
何も起こらなかったように見えるが、「何も表示せずにプログラムが終了した」というのが正確な表現である。

以上を確認したら、以下の解説に進もう。


If 文

本ページでは、状況に応じて処理が分岐するプログラムがIf文により実現されることを学ぶ。

If 文は以下の構造を持っている。

If 条件 Then
	命令 (複数の命令でも良い)
End If

上記のような記述により、以下のような動作が実現される。 これを模式的に表すと、以下の様になる。



すなわち、条件が満たされているか (True)、満たされていないか (False) で、
「命令」を実行するかどうかが変わる、ということである。
これは、プログラムの処理が条件によって分岐する、と言い替えることができる。

冒頭のプログラムで該当箇所を抜きだしたのが以下である。
ユーザーが入力した整数が 5 より大きいときにのみ「あなたの入力した数字は5より大きいですね」と表示するプログラムである。
入力した整数が 5 以下の場合は何も表示されずにプログラムが終了する。

	If x>5 Then
		MsgBox "あなたの入力した数字は5より大きいですね"
	End If

そのどちらも冒頭で確認したはずである。

なお、以上の状況を数直線上で表したのが下図である。数直線の x > 5 の範囲のみを If で指定し、
その範囲でのみ MsgBox が表示されるということである。




Else のある If 文

If文では、一つの条件に対しその条件が正しいか (True)、正しくないか (False) で 命令を実行するかしないかの 2 通りに分岐させた。
このとき、「命令を実行するかしないか」の 2 通りではなく、 「命令1と命令2のどちらを実行するか」の 2 通りの方が便利なことが多い。

それを実現するには、If 文に Else 句を追加すればよい。Else のある If 文は以下のような構造をしている。

If  条件  Then
	命令1 (複数の命令でも良い)
Else
	命令2 (複数の命令でも良い)
End If

この場合の模式図は以下の様になる。



先程の If 文との違いは、「ある命令を実行するかしないか」ではなく「命令 1 と命令 2 のどちらを実行するか」の 2 択になることである。

使用例は、冒頭の例を流用すれば以下のようになるだろう。

	If x > 5 Then
		MsgBox "あなたの入力した数字は5より大きいですね"
	Else
		MsgBox "あなたの入力した数字は5以下ですね"
	End If

先程の例と異なり、x が 5 以下の場合も MsgBox が表示されるようになる。

実行するには、If 文の部分のみを上記の記述に差し替えれば良いだろう。
差し替え後は以下のようになる。If から End If まで、注意して貼り付けること



実行し、入力ウインドウに 5 以下の整数として例えば 4 を入力して OK ボタンをクリックすると、
以下のように、先程は現れなかった MsgBox が現れる。



すなわち、MsgBox に表示される内容が、x の大小により、以下の 2 択になったということである。 以上の状況を数直線上で表したのが下図である。数直線の x > 5 の範囲が If で指定されている状況は 1 つ目の例とかわらない。
異なるのは、それ以外の範囲、すなわち x ≤ 5 の範囲がElse により指定されていることである。
x ≤ 5 と明示されていなくても、Else が示す範囲が x ≤ 5 であることに気づけなければならない、ということである。




ElseIf のある If 文

ここまでは、一つの条件に対しその条件が正しいか (True)、正しくないか (False) で 2 通りに分岐させた。
実際のプログラミングでは、命令を 3 通り、4 通りと分岐させたいことがしばしばある。
そのような場合は ElseIf によって条件を追加していくことができる。構造は以下の通り。

If 条件1 Then
	命令1 (複数の命令でも良い)
ElseIf 条件2 Then
	命令2 (複数の命令でも良い)
ElseIf 条件3 Then
	命令3 (複数の命令でも良い)
…
ElseIf 条件n-1 Then
	命令n-1 (複数の命令でも良い)
Else
	命令n  (複数の命令でも良い)
End If

これを模式的に表すと下図のようになる。



具体例を見た方が分かりやすいだろう。これまでの例を発展させ、処理を以下の3つに分岐させてみよう。 それを実現するのが以下の If ~ ElseIf ~ Else ~ End If である。

	If x>5 Then
		MsgBox "あなたの入力した数字は5より大きいですね"
	ElseIf x<5 Then
		MsgBox "あなたの入力した数字は5より小さいですね"
	Else
		MsgBox "あなたの入力した数字は5ですね"
	End If

Else の使い方に注意しよう。このプログラムでは「x が 5 に等しい」という条件を直接書いていないが、
「x>5 でもなく x<5 でもない (すなわち x=5)」と言う形で「x が 5 に等しい」という条件を実現しているのである。

プログラムを実行するには、If 文の部分のみを上記の記述に差し替えれば良いだろう。
差し替え後は以下のようになる。If から End If まで、注意して貼り付けること



実行し、入力ウインドウに 5 を入力して OK ボタンをクリックすると、
以下の MsgBox が現れる。



以上の状況を数直線上で表したのが下図である。x > 5 の範囲が If で指定されて、x < 5 の範囲が ElseIf で指定されている。
それ以外の範囲、すなわち x = 5 の場合が Else により指定されている。
x = 5 と明示されていなくても、Else が示すものが x = 5 であることに気づけなければならない






←キーボードからの入力条件文の書き方→

Excel で学ぶ Visual Basic for Applications (VBA)に戻る