さて、ここからがプログラミングの本質(本番)となりますね。
※以下1文理解する必要はないです
CASLUでいうCPA,CPL(比較)とかJPL,JUMP(分岐制御)とかに当たる部分となります。
まず、if分の仕様。
If [条件式]
Then {構文}
{
[構文]
(EleseIf [条件式] Then)
[構文]
(Eleseif [条件式]
Then)・・・
[構文]
(Else)
[構文]
End If
}
()・・・
とは「その構文をいくつでも使える(使わない事もできる)」という意味です。
[構文]というのは(1行以上の)プログラム(msgbox(""))などの塊と思って構いません。
=ElseIfは3つでも4つでも10個でも無くてもいい
Elseは省略できます。
動画ではEnd
Ifが必要でしたが、
If [条件式] Then
〜(後置表記)文:(これは少々特殊です)
というものがあります。この表記方法はEnd
Ifが省略できます。
例えば、
If a=10 Then
msgbox("")
という表記です。
条件が「True」の時に1行のみ処理を行う場合に利用でき、
実際のプログラムでも利用されます。
ダメな例:aが10の時に「a」と表示されたメッセージボックスの次に空白のメッセージボックスを表示したい。
(不等号とか細かい話は後々)
If
a=10 Then
msgbox("a")
msgbox("")
これだとmsgbox("")はaが10だろうと10でなかろうと実行されて(つまりIf分に関係なく)しまいます。
つまり、
If
[条件式] Then
[構文]
はThen直後の構文のみがIf文の条件に基づき実行されます。
(改行後はIf文に関係ない)
この表記は[構文]が1行の場合の
If
[条件式] Then
[構文]
End If
と等価になります。
さて、ここからがIf文の細かい仕様。
If [条件式1]
Then
[構文1]
ElseIf [条件式2] Then
[構文2]
Else
[構文3]
End
If
[構文4]
というのがIf文の形式(ElseIfとElseは省略できますが全て書きました)
な訳ですが、この時「If [条件式]
Then」の、
[条件式]が
「0以外の時(「TRUE」の時)」にIf文直下の構文(ここでは[構文1])が実行されます。
([構文1]が終わりElseIfを見つけるとElseIfは実行されず、
End
Ifまで飛んで[構文4]となります。)
[条件式]が「0の時(「FALSE」の時)」、ElseIfがあればElseIfを実行します。
ElseIfが無ければElse直下の構文(ここでは[構文3])を実行します。
Elseも無ければIfを抜けEnd I直下の構文(ここでは[構文4])を実行します。
ElseIfはElseIf
[条件式] Then
の、[条件式]が「0以外の時」に直下の構文(ここでは[構文2])を実行し
[条件式]が「0の時」、次のElseIfがあれば次のElseIfを実行し、
(ここでは次のElseIfは無いですが)
次のElseIfが無ければElse直下の構文を実行し
Elseも無ければIfを抜けEnd
I直下の構文を実行します。
つまり、If→ElseIf(→ElseIf→・・・)→Else
という優先順位なわけです。
もし〜なら→それ以外で〜なら(→それ以外で〜なら→・・・)→全ての条件に当てはまらなければ
という日本語訳となるのでそこからしても分かるかと思います。
で、
重要なのはこの「0の時」「0以外の時」という事。
If
a=10 Then
処理1
Else
処理2
End If
は日本語に訳すと「もしaが10なら処理1を実行し、aが10でなければ処理2を実行する」
ですが、プログラム上では
もし「a=10」が「0でないなら」処理1を実行し、「a=10」が「0なら」処理2を実行する
という事になるのです。(これを覚えておくと後々仕組みが理解できます。)
また、真偽値において、
「0」は「False」であり「0以外」は「True扱い」であるので覚えておくと良いでしょう。
※本来の「True」は「-1」です。
また
「msgboxの「vbOk」などはIf文でも利用できる」
と書きましたが、
動画では、
num
=msgbox("")
If num=1 Then
[処理]
End
If
となっています。(OKボタンが押された時[処理]を行う)
これは、
If msgbox("")=1
Then
[処理]
End If
と等しく「1」は「vbOk」と等しいので
If msgbox("")=vbOk
Then
[処理]
End
If
で「msgboxでOKボタンが押された時[処理]を行う」
と書き換える事ができます。
数字から英単語になった事で視覚的に見やすくなったのではないでしょうか?
ただ、
num
=msgbox("")
msgbox(num)
If num=1
Then
[処理]
End
If
赤い色の部分で押されたボタンを(数字を見る事で)一旦確認しでき
不正な値やおかしな値が変数に入っていないか確認できるので
慣れない内は一旦変数に結果を記録する事をお勧めします。
(実際にプログラムとして配布する際に無駄を無くすのも手法としてはアリです。)
ちなみにIf文は条件式が
「0以外の時」直下の構文を実行し
「0の時」Else直下の構文を実行する
という特性を利用し、
If a
Then
[構文1]
Else
[構文2]
End
if
と変数を直接If文の条件判断にも使えます。
また、必ず[構文1]が実行されるので意味はありませんが、
If True
Then
[構文1]
Else
[構文2]
End
if
というのも文法的な間違いではありません。