ExcelVBA(マクロ)で条件分岐する方法/If文(If~Thenステートメント)の使い方

smiley IT

関数同様、マクロでもIfを使って条件分岐することが可能です。関数とは若干書き方がちがいますが、使ってれば勝手に覚えます。

Advertisements

If~Thenステートメントの使い方

条件分岐
If 条件1 Then
(条件1がTrueの処理)
ElseIf 条件2
(条件1がFalseかつ条件2がTrueの処理)

End If

※ElseIfは省略可能
if1
If文はVBA的には制御フローステートメントと呼ばれるくくりに入ります。ゲーム的に言えばフラグ管理です。
今回はこのA1セルに書かれた「1」を、If文で条件づけをして操作してみたいと思います。
if2
VBEを開き、最初の行にIf Range(“A1”) = 1 Then、一行空けてEnd Ifと記述します。もしA1の値が1の場合……といった意味で、この条件を満たす場合、Then(それなら)以降の処理が実行されます。
If文の処理はEnd Ifまで到達すると終了します。
if3
処理として、Valueプロパティを使ってA1の数値を1増やします。
if4
実行結果です。このマクロを何度実行しても、「A1の値が1である」という条件を満たさないので、数値は2以上に増えることはありません。
if5
さらに下にElseIfを記述し、別条件としてA1の値が2の場合の処理を記入します。
ElseIfは、上の条件が達成されなかった場合のみ判定されます。
if6
今度はA1の数字を1減らしてみます。
if7
これで同じマクロを実行しても、数字が1と2の間を行ったり来たりする「別の結果が得られるマクロ」が完成しました。
最初の条件が達成された時点で数字は一度2になりますが、前の条件が達成された時点で以降のElseIfは無視されます。
数字が2になる→ElseIfを達成するのですかさず1に戻る、といった現象は起きません。
if8
ElseIfはいくつも連続して書くことができます。常に上の処理が下の処理より優先して判定され、IfまたはElseIFのいずれかひとつがTrueと判定された時点でIf~EndIfは完結し、以降の判定は無視されます。
判定には=以外にもいろいろ比較演算子が使えます。比較演算子については関数のほうのIfの記事参照。
' vba
' 処理①
If Range("A1") = 1 Then
Range("A1").Value = Range("A1").Value + 1
' 処理②
ElseIf Range("A1").Value = 2 Then
Range("A1").Value = Range("A1").Value + 1
' 処理③
ElseIf Range("A1").Value <= 3 Then
Range("A1").Value = 1
End If ' If文終了、ここまででワンセット

同様に条件分岐でSelect Case文というのもあり、これはA1の値が1の時、2の時、3の時……というのを並列して書くことができます。ひとつのセルの値によって複数に分岐したい場合は、こちらのほうがすっきり書けることもあります。

やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
逆引き(やりたいことから探す)Excel記事まとめ
関数・演算子・メソッド・プロパティ名から探すExcel/VBA(マクロ)使い方・組み合わせ方まとめ
こちらはExcelやメソッドの諸機能を、機能の名称から探せるまとめ記事です。

コメント