【VBA】VBAで制御文使ってみた(If文)

制御文について

こんにちは!今回は制御文について書きます😃

早速いくよ🛩

VBAの制御文は、『If』と『Select』があります。

今回はIf文について説明します。

Excel関数のIfと似てまーす、、、

というか、IfはExcelよりVBAのが簡単。それでいて、使い勝手がいいと思います。

Excelで、IfとIfの関数組み合わせてるところ見ると、VBAのが簡単なのにな~って思ってしまう😅

ExcelのIfをよく使う人からしたら、すごく簡単に感じると思いますよ👍

ちなみに、繰り返し文と一緒で、制御文もマクロの記録使っても出てきません😩

 

制御文(If文)

冒頭で紹介した通り、制御文には『If』と『Select』があります。

Ifは、使い勝手が良くて複雑な条件を書けます。

Selectは、比較的単純で分岐の多いときに使います。

だから、Selectは法則みたいなものがあって読みやすい。

Ifは使い勝手がいい反面、条件が多くなることが多いので、ごみごみして読みづらくなりがち。

はい、、

しかしながら、Ifでしか書けないこともあるので、

一度、Ifで書いてみて、Selectに切り替えれそうならSelectに切り替える。

それでいいと思います。(やっぱSelectのがメンテも簡単なことが多いしね)

もっと分かりやすく書くと、Selectは法則性・規則性なものに使って、それ以外はIfでいいかなって感じ。

マグロ釣りに例えれば、Selectは『はえ縄漁』で、Ifは『一本釣り』かな

はえ縄漁(Select)

Sub haenawaryou() 'はえ縄漁
Dim maguro As String
    maguro = "サンマが好き"
    Select Case maguro
        Case "ハマチが好き"
            Debug.Print "小型マグロが釣れました"
        Case "イカが好き"
            Debug.Print "小型マグロが釣れました"
        Case "サンマが好き"
            Debug.Print "小型マグロが釣れました"
        Case "サバが好き"
            Debug.Print "小型マグロが釣れました"
        Case "トビウオが好き"
            Debug.Print "小型マグロが釣れました"
        Case "ニシンが好き"
            Debug.Print "小型マグロが釣れました"
    End Select
End Sub

一本釣り(If)

Sub ipponduri() '一本釣り
Dim maguro, esa, tenki As String
    maguro = "サンマが好きイカが嫌い"
    esa = "生"
    tenki = "晴れ"
    If Not maguro Like "*イカが好き*" And esa = "生" And tenki <> "雨" Then
        Debug.Print "イカが好きじゃい生エサしか食べない雨以外は釣れない大型マグロが釣れました"
    End If
End Sub

はい、如何に一本釣りが難しいかよくわかりますね。

はえ縄漁(Select)は、1つの変数に対して分岐がたくさんある時、それ以外は一本釣り(If)でいいっす。

幽遊白書で例えると、Ifが『レイガン』で、Selectは『ショットガン』か。

もういいって?

あんまり深く考えないで。次行きましょう。

 

If文の解説

基本的に上から読んで行って、条件が一致した場合にIf内の処理が実行されるっす。

条件式には『比較演算子』と『論理演算子』を使います。

比較演算子

値の比較をするときに使います。

2つの値を『=』『>』『<』などを使って比較し、TrueとFalseで返します。

ちなみ、

『=』は等しい、『<>』は等しくない。

『>』は大なり、『>=』は以上みたいな感じ。

(言語によって少し違ったりするけど、小学生でも理解できる?)

論理演算子

比較演算子によって得られた結果(TrueかFalse)に対して使用します。

『And』は~かつ~、『Or』~もしくは~、『Not』は~ではない。

使用例は一本釣りみたいな感じで使います。

2つの関係(あん肝🐡)

んで、ここで覚えておいて欲しいのは、、、

比較演算子で『True』か『False』で返ってくるので、

今度は、『True』や『False』を論理演算子で計算するということ。

簡単だけど、肝だねぇ👀

 

図で解説

少し難しいので、ちょっと図を使って説明しますね。

先ず、比較演算子↓

比較演算子は、Trueの場合に、その下の行の処理が実行されます。

Falseの場合は、次の分岐へ。分岐がなければ、Ifを抜けます。

次いで、論理演算子↓

Orの場合⇒比較演算子の結果が、どちらか1つでもTrueなら、その下の行の処理が実行されます。

Andの場合⇒比較演算子の結果が、どちら共Trueなら、その下の行の処理が実行されます。

OrもAndも条件を満たさない場合は次の分岐へ。分岐がない場合はIfを抜けます。

最後に、Ifの分岐↓

上から順に条件を見ていって、

条件を満たせば処理、満たさなければ次の分岐。

そして、最終的にはElseの処理が実行されるが、Elseがない場合はIfを抜けます。

 

If文を記述

最後に簡単なIf文を書いて、動作の確認をしてみましょう。

Sub ifnokyodou()
Dim i As Long
    i = 1
    
    'F8のステップインで動作確認
    If i = 1 Then '←True
        i = i + 1
    Else
        Debug.Print "実行されません"
    End If
    
    Debug.Print "現在のiは" & i
    
    If i > 0 And i < 2 Then '←True / False
        Debug.Print "実行されません"
    ElseIf i < 3 And i > 1 Then '←True / True
        i = i + 1
    Else
        Debug.Print "実行されません"
    End If
    
    Debug.Print "現在のiは" & i
    
    If i = 1 Then '←False
        Debug.Print "実行されません"
    ElseIf i < 3 And i > 1 Then '←False / False
        Debug.Print "実行されません"
    End If
    'どの分岐の条件を満たさないのでifを抜けました
    
    Debug.Print "現在のiは" & i
    
End Sub

多分、ExcelのIfより簡単に感じた人多いんじゃないかな?

Ifができるようになってきたら、日付や文字の比較もできるし、

Ifをループにぶち込めば、色んな処理も可能になります✨

オメェ、はワクワクしねぇんか?

オラ、ワクワクすっぞ!

 

 

んな感じで、次回はSelectについて書きます😊

悟飯!Selectの次は実践的なやつだ!座学ばっかじゃ挫折すっぞ!

井プログラミング9割挫折

んじゃ、次回も見てくれよな✋