VBA(Excel)

IF文はプログラミングの基本です(Excel VBA)

スポンサードリンク

「Excelのマクロ記録の使い方を覚えたけど、自力でVBAを使ってプログラミングできるようになりたい。何から覚えたらいいのかな?」

マクロ記録を使えば記録した動きをそのまま再現できますが、単純な処理しか行えません。VBAを使ってプログラミングするためには、まずはIF文をマスターすることをオススメします

この記事を書いている私は、約10年前からExcelのVBAを業務に活用しています。VBAのコードを書く時には、ほぼ毎回IF文を使用しています。

IF文では条件により処理を変えられますので、マクロ記録だけでは出来ない様々な処理を実現できます。

また、IF文はプログラミング全般で基本としてよく扱われますのでI、他の言語にも転用できます。

ExcelVBAの初学者にとって、この記事がIF文を習得する助けになれば幸いです。

また、本文でもVBAコードを掲載していますが、直接VBEにコピペして使っていただいて構いません。

実行して不明な動きがありましたら、1行ずつステップインで確認することをオススメします

方法については、過去にこちらの記事に記載していますので、参考にどうぞ。

スポンサードリンク

IF文の基本

IF文は受けた条件によって処理を変えることが出来ます。

他のサイトでも紹介されていますが、このような書き方をします。(このコードはコピペしても正しく動きません)

If 条件1 then
    処理A
Else
    処理 B
End if

条件1にあてはまれば処理Aを行い、あてはまらなければ処理Bを行うという流れです。

流れだけを聞くと難しいように感じるかも知れませんが、このような判断は日頃誰でも行っています

例えば、

  • 所持金が足りないので欲しいものを買わない
  • 宿題が終わったので友達と遊ぶ
  • 偏差値で進学する学校を決める

といった判断は、それぞれの判断基準にそって行動が決められます。

Excel VBAでIF文を書くという事は、判断のための基準作りと行動(処理)を明文化しているということになります。

IF文を使ったことがない方は、まずはワークシート関数のIF関数を使えるようになりましょう。ExcelのIF関数もIF文と同じ様な処理を行えます。

IF関数の基本に慣れてきたら、IF関数の中に別のIF関数を入れてみましょう。

入れ子「ネスト」と呼ばれる状態です。プログラミング言語では、ネストが日常的に使われます。

IF関数でネストに慣れておけば、IF文や他のVBAにそのまま転用できます。

過去にIF関数の使い方を書いていますので、どうぞ参考にしてください。

IF文でどのように条件を設定するか

IF文を使うためには条件を設定しなければなりません。

条件を設定するためには、式や関数が必要になります。

  • 不等号や等号
  • 論理記号
  • ワークシート関数やVBA関数

これらのものを使って条件を設定するための式を作ります。

不等号や等号

「等しい」「異なる」「より大きい」「より小さい」などを指定します。

小学校の算数レベルでの知識で設定することが出来ます。

例えば、

  • x=100(Xは100と等しい)
  • y<>150(yは150と異なる)
  • i<200(iは200未満である)

といったことが挙げられます。

下は例文です。

Dim x as integer
x =150
If x>=100 then
    Msgbox(“100以上です”)
Else
    Msgbox(“100未満です”)
End If

結果は、「100以上です」が表示されます。2行目のx=150をx=50に変えると、「100未満です」が表示されます。

等号と不等号を一緒に使う「以上」や「以下」の場合は、「<=」や「>=」のように、不等号を先に使います。

ANDやOR

「かつ(AND)」や「または(OR)」といった条件を設けます。

例として、

  • 複数条件を満たす(a=100 and b=200)
  • 片方のみの条件を満たす(x=500 or y=700)

ANDの例文です。

Dim x,y as integer
x = 85
y = 65
If x>=80 and y>=80 then
    Msgbox(“合格”)
Else
    Msgbox(“不合格”)
End If

ここでは、xは条件をみたしていますが、yは条件を満たしていないので「不合格」になります。AndをOrに変えると、「合格」となります。

複雑な条件を設定する場合は、ベン図を手書きしてみると良いでしょう。

ワークシート関数やVBA関数

Excel VBAでも、ワークシート関数を使うことが出来ます。

SUMやCOUNT、VLOOKUPも使うことが出来ます。

ワークシート関数のVBAでの使い方については、後日触れます。

また、VBAで使えるVBA関数というものもあります。

IF文の条件でよく使われるものとして、Isnull関数が挙げられます。

Isnullは、対象が空白であるかを判断します。

関数の結果はtrue かfalseで表されます。

Dim x as integer
x = Null
If Isnull(x) =true then
    Msgbox(“無”)
Else
    Msgbox(“有”)
End if

結果は「無」を表示します。「x=Null」を「x=1」に変えると、「有」を表示します。

スポンサードリンク

IF文の条件を増やす

If文は、Elseifやネストを使ったりして条件を増やすことが出来ます。

Elseifを使う

条件が3択以上の場合はElseifが必要です。条件を増やしたい分だけElseifを増やすことが出来ます。

Dim i as Integer
i=75
If i>=80 then
    Msgbox(“優”)
Elseif i>=60 then
    Msgbox(“合格”)
Else
    Msgbox(“不合格”)
End If

例文では、”優”、”合格”、”不合格”の3段階の条件を設定してみました。

ネストにする

IFの中にIFを入れて条件を設ける場合もあります。例文は、上のElseifを使ったIF文と同じ結果にはなりますが、”合格”の条件設定の後に”優”の条件を設定しています。

Dim i as Integer
i=75
If i>=60 then
    '下のIfがネスト
   If i>=80 then
        Msgbox(“優”)
    Else
        Msgbox(“合格”)
    End If
Else
    Msgbox(“不合格”)
End If

このように、IF文では設定したい条件の数だけ増やすことができますが、あまり増やしすぎるとわかりづらくなりますので、出来るだけシンプルにできないか検討しましょう。

IF文を書く時に注意すべきこと

End Ifを忘れないようにする

Ifと締めるためのEnd Ifはセットです。End Ifを書き忘れるとエラーとなり、正しく作動することが出来ません。特にネストを重ねた場合は、途中のEnd Ifを書き忘れやすくなりますので注意しましょう。

インデントやコメント文で見やすく

ネストを使うなどして条件が増えると、コードが解読しづらくなります。

Tabキーで文の初めの位置を調整することで、ネストが分かりやすくなります

また、アポストロフィでコメント文を入れておいても、後でコードを見返しやすくなります

上のネストを使った例文では、インデントとコメント文を使っていましたが、インデントを使わなかったら下のようになります。

Dim i as Integer
i=75
If i>=60 then
If i>=80 then
Msgbox(“優”)
Else
Msgbox(“合格”)
End If
Else
Msgbox(“不合格”)
End If

どうですか?

とても見づらいですよね。

実行すると同じ結果を表示しますが、読みやすさに配慮出来ていないと、後で修正するときに苦労することになります。

エラーの切り分けでIF文を使う

初めてプログラムを実行すると、エラーがほぼ発生します。

発生したエラーを更に処理して完成に近づけるのですが、その時にもIF文は使えます。

エラーが発生する条件を確認し、その部分のみを切り出してIF文を入れてブレークポイントを設けます

特に繰り返し処理の回数が多い場合などは、早くエラーの対象箇所に届いて症状を確認することができます

当然ですが、修正後にIF文を消すことも可能です。

どうしてもエラーの回避が困難な場合はIf文を残し、特定の条件のみエラーをスルーする方法をとっても良いです。

まとめ

IF文は色々なところで使えます。

VBAのIF文を修得出来たら、他のプログラミング言語でも使えます。

以前にJavaについてのセミナーを受講することがあったのですが、IF文が学習内容に含まれていました。VBAのIF文を知っていれば十分に使える内容であったのを記憶しています。

言語が変わると文法が変わりますが、考え方や可読性を高める方法は同じです。

VBAを使ったIF文を習得できれば、他言語にもそのまま横展開出来ますので、自信を持って挑戦していきましょう。


本日も最後までありがとうございました。

スポンサードリンク

スポンサードリンク

-VBA(Excel)