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

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

初心者のためのExcel(エクセル)マクロVBA入門-プログラミングの基礎7~制御構文(条件分岐)

  • さて、プログラムというものがどんなものか体験的に理解できてきたと思うんですがどうでしょうか?遠慮なく質問お待ちしてます。

さて、今回はプログラミング言語の一番のキモである制御構文についてです。制御構文には大きく分けて2つくらいあります。

  • 条件分岐(If文、Select case文)
  • 繰り返し(For文、Do~Loop文)

この2つです。たったこれだけ覚えればいいのです。超簡単!プログラミングは実は何かを実行する命令文と、それを制御する制御構文で出来ています。基礎としてこれが分かっていればもはや十分です。あなたでもマクロは組めます!
最初の方にやったのですが、プログラムは基本的には書いたら書いた順番に上から実行していきます。しかし、場合によっては命令を分けたい時があるわけです。例えば計算の結果によって、セルの色を塗り分けたいとか、特定の文字が出てきたら、その文字を消したいとか。それを条件分岐で制御するわけです。そしてこの条件分岐は英語の熟語のように決まった言い方があり、それに当てはめるだけです。

条件分岐の例

If a = 100 Then

    MsgBox "100点おめでとう!"
    
Else
    
    MsgBox "惜しかった!次は頑張ろう!"

End if

これは制御構文のIF文と呼ばれる、条件分岐構文の1つです。簡単ですね。「もし~だったら」ってことです。だからIfですね。上のコードだと、「もし変数aが100だったら100点おめでとう!というメッセージを表示、そうじゃなかったら、惜しかった!次は頑張ろう!というメッセージを表示する」ということになります。「そうじゃなかったら」は「Else」と書いてその後に命令文を書けばいいですね。
では、もし100点だったらこうで、そうじゃなくてもし90点以上だったら、こうで、そうじゃなかったら・・・という場合はこれも簡単で

If a = 100 Then

    MsgBox "100点おめでとう!"
    
ElseIf a >= 90 Then
    
    MsgBox "惜しかった!次は頑張ろう!"

Else

    MsgBox "残念次は頑張ろう!"

End if

このように「そうじゃかったらもし~」は「ElseIf」と言い換えます。これでExcelは私たちの言葉を理解してくれるわけです。
これを英語の一般的な熟語のように書くと・・・

If 条件 Then

    処理1

ElseIf 条件 Then

    処理2

Else

    処理3
    
End If

となりますね。ElseIfはどんどんつなげて書くことができます。End Ifは必ず必要です。
では、これを100点、90点以上、80点以上、70点以上、60点以上、59点以下で分けるとどうなるでしょう?面倒なので書かないですが、たくさんのElseIfを書いてくことになります。別に間違ってはいないのですが、なんかスマートな感じではありません。。。こういう場合にはSelct Case文を使用します。今度は、一般的な書き方から書きますと・・・

Select Case 変数

    Case Is 比較条件

       変数が比較条件を満たした場合の処理

    Case Is 比較条件

       変数が比較条件を満たした場合の処理

    Case Else

       変数が条件以外の場合の処理

End Select

このSelect Case文には条件によってさまざまな書き方があるので、それはご自身で見てみてください。ここでは書き方と考え方だけわかればオッケーです。さて、具体的にどうなるかというと・・・

Select Case a

    Case Is = 100

        MsgBox "100点おめでとう!"


    Case Is >= 90

        MsgBox "惜しかった!"

    Case Is >= 80
        
         MsgBox "もう少しで高得点!"
    
    Case Is >= 70
        
         MsgBox "これだけ取れたら合格点!"
    
    Case Is >= 60
    
         MsgBox "合格まであと少し!"

    Case Else

         MsgBox "残念!次頑張ろう!"

End Select

どうでしょうか?かなりすっきりと書けたと思います。ですが書いた行数などはほとんどIf文と変わりません。ではなぜこういう構文があるのでしょうか?それはちょっと専門的になりますが、処理の仕方が違うため、実行の速度に影響します。If文でこの文章を書いた場合、ElseIfで書かれた条件文をすべてExcelは評価をして判定します。Select文だと、条件に見つかった時点でそれ以外の条件は評価しません。つまり、評価をする時間が「短縮」されるわけです。したがってこの場合はSelect文の方がよりプログラムの実行効率の良い書き方になります。

プログラミング言語も言葉ですから、回りくどい言い方よりもスマートに言った方がいいですよね?ということです。とりわけExcelさんはコンピュータなので気を使う必要もありません。まっすぐ単刀直入に最短距離で伝えられる言葉を選べば、素直に言うことを聞いてくれます。

人間だとこうはいかないよねぇ・・・



かしこ