初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

初心者のためのExcel エクセルマクロVBA入門-制御構文:IF文

( ゚д゚)?せいぎょこうぶん?


ここまで色々とオブジェクトについて、プログラミングの基礎として、変数、関数について学んできました。プログラミングの基礎としては後1つそれが制御構文です。ぶっちゃけ、これだけやれば初心者のうちでも大抵のことはできるようになると思います。
制御構文には大きく分けて2つ。

  • 条件分岐
  • 繰り返し

この2つを覚えてください。以上です。他にはありません。プログラミングは実は結構シンプルでして、色々とぐちゃぐちゃと書いているように見えますが、実は条件によって処理を分岐させたり、同じ処理を繰り返したり、しているだけで後は普通に上から順番に実行しているだけです。

もしこうだったら~IF THEN ELSE


なんか、英語みたいですよね。プログラミングもさんざん言ってますが「言葉」なのでこんな風でも何も不思議ではありません。伝える相手がアメリカ人なのか?コンピューターなのか?(VBAならエクセルさんですよね)の違いです。

さっそくコード。

Sub test()

	If Sheet1.Range("A1").Value = "1" Then
	    MsgBox "1です。"
	Else
	    MsgBox "1ではありません。"
	End If
End Sub

すこしハイライトが多いとご指摘いただいたので、減らせるようにちょっとしてみました。それはさておき、これがIf文です。

If 条件 Then

の後にその条件を満たす場合に行う処理を書き、

Else

の後に、満たさない場合の処理を書きます。Elseは書かなくても良いです。つまり、満たしたときだけ処理をしたいなら、Else以下は不要になり・・・

Sub test()

	If Sheet1.Range("A1").Value = "1" Then
	    MsgBox "1です。"
	End If
End Sub

だけで良いということになります。Ifの後に続く=で結ばれた式は残念がら代入式ではありません。評価式条件式と呼ばれるものです。評価式は右辺と左辺を=や<、>などの不等号で評価します。またオブジェクトを評価する時にはISなども使います。評価式はその条件を満たせばTrue(真)満たさなければFalse(偽)を返します。

ちょっと難しいでしょうか?要はね、

おんなじか?大きいか?小さいか?とかTrueかFalseか見極める。


ってだけです。主な評価で使う=や<>などの記号を「比較演算子」って言います。これは言葉のお話。別に知らんでもよろしい。

比較演算子

演算子 説明
= 右辺と左辺が同じかを評価する
> 右辺より左辺が小さいかを評価する
>= 右辺を含め左辺が小さいかを評価する
右辺より左辺が大きいかを評価する
<= 右辺より左辺が大きいかを評価する
<> 右辺と左辺が等しくないかを評価する
IS オブジェクトを比較する

これで比較演算子は全部です。さて、これだけで条件を全部書けると思いますか?If文の中に入れる条件には本当に様々な物がありますよね?

  • セルA1とセルB1が同じなら・・・

位なら問題ないですが、

  • セルA1とセルB1が同じ、かつセルC1とD1は等しくなく、かつセルE1が100以上で、またはセルF1に○って入ってたら・・・

なんて場合はどうしましょ?

( ゚д゚)モウムリ・・・

論理演算子

そんなことはありません。ちゃんと実現できる方法があるのです。それが論理演算子と呼ばれるもので、複雑な条件を実現できるものです。まぁ、AndとかOrとかですよ。
論理演算子も色々あります。とりあえず、書いちゃうと・・・

論理演算子 説明
  Not   否定
  And   論理積
  Or    論理和
  Xor   排他論理和
  Eqv   論理等価
  Imp   論理包含


( ゚д゚)・・・はぁ?


ですよね・・・えっとですね、Xorから下は覚えないでいいです。私今までそれで困ったことがないですから。10年近くVBAでツール作ってて。覚えてほしいのはNotとAndとOr!これだけ!

  • And:かつを表す。a=b And c=b ならどちらの条件も満たす場合にTrue
  • Or:またはを表す。a=b Or c=b ならどちか満たせばTrue
  • Not:じゃないならを表す。Not a=b なら条件を満たさなければTrue

これだけ覚えてください。さっきの複雑な条件もAndとOrの組み合わせだけです。ちょっと複雑に思えるかもしれませんが、そんな時は先ほどのように日本語で考えてみてください。

これがこうで、かつこうで、またはこうなら・・・

という言葉を条件式にすればいいだけです。私だって条件が複雑な場合はそうして、言葉で書いたり、条件表みたいな表を書いたりして整理をしてから書いています。それでいいのです。

ElseIfたくさん・・・

ElseIfはたくさん書けます。

Sub test()

	If Sheet1.Range("A1").Value = "1" Then
	    MsgBox "1です。"
	ElseIf Sheet1.Range("A1").Value = "2"
	    MsgBox "2です"
	ElseIf Sheet1.Range("A1").Value = "3"
	    MsgBox "3です"
	ElseIf Sheet1.Range("A1").Value = "4"
	    MsgBox "4です"
	ElseIf Sheet1.Range("A1").Value = "5"
	    MsgBox "5です"
	Else
	    MsgBox "1~5ではありません"
	End If
End Sub

という感じですね。ElseIfは1つ上の条件が満たされなければ、ElseIfの条件を評価します。満たした場合は、以後の評価はされません。

いかがでしょうか?まずは条件分岐!これをマスターするとプログラミングへの道がぐっと!近づきます。次は同じ条件分岐でもIFとはちょっと違うSelect文です。


今日はここまで!

かしこ