初心者のための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文です。
今日はここまで!
かしこ