「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文を習得できれば、他言語にもそのまま横展開出来ますので、自信を持って挑戦していきましょう。
本日も最後までありがとうございました。