VBA(Excel)

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

スポンサーリンク

こんにちは。システム担当の父親、KATSUです。
Excel歴20年、Access歴10年ですが、ブログは50記事を書いた程度です。先日、「パーフェクトExcel VBA」という書籍を購入しました。今まで約10年間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)