関数同様、マクロでもIfを使って条件分岐することが可能です。関数とは若干書き方がちがいますが、使ってれば勝手に覚えます。
If~Thenステートメントの使い方
条件分岐
If 条件1 Then
(条件1がTrueの処理)
ElseIf 条件2
(条件1がFalseかつ条件2がTrueの処理)
…
End If
※ElseIfは省略可能
If 条件1 Then
(条件1がTrueの処理)
ElseIf 条件2
(条件1がFalseかつ条件2がTrueの処理)
…
End If
※ElseIfは省略可能

If文はVBA的には制御フローステートメントと呼ばれるくくりに入ります。ゲーム的に言えばフラグ管理です。
今回はこのA1セルに書かれた「1」を、If文で条件づけをして操作してみたいと思います。
今回はこのA1セルに書かれた「1」を、If文で条件づけをして操作してみたいと思います。

VBEを開き、最初の行にIf Range(“A1”) = 1 Then、一行空けてEnd Ifと記述します。もしA1の値が1の場合……といった意味で、この条件を満たす場合、Then(それなら)以降の処理が実行されます。
If文の処理はEnd Ifまで到達すると終了します。
If文の処理はEnd Ifまで到達すると終了します。

処理として、Valueプロパティを使ってA1の数値を1増やします。

実行結果です。このマクロを何度実行しても、「A1の値が1である」という条件を満たさないので、数値は2以上に増えることはありません。

さらに下にElseIfを記述し、別条件としてA1の値が2の場合の処理を記入します。
ElseIfは、上の条件が達成されなかった場合のみ判定されます。
ElseIfは、上の条件が達成されなかった場合のみ判定されます。

今度はA1の数字を1減らしてみます。

これで同じマクロを実行しても、数字が1と2の間を行ったり来たりする「別の結果が得られるマクロ」が完成しました。
最初の条件が達成された時点で数字は一度2になりますが、前の条件が達成された時点で以降のElseIfは無視されます。
数字が2になる→ElseIfを達成するのですかさず1に戻る、といった現象は起きません。
最初の条件が達成された時点で数字は一度2になりますが、前の条件が達成された時点で以降のElseIfは無視されます。
数字が2になる→ElseIfを達成するのですかさず1に戻る、といった現象は起きません。

ElseIfはいくつも連続して書くことができます。常に上の処理が下の処理より優先して判定され、IfまたはElseIFのいずれかひとつがTrueと判定された時点でIf~EndIfは完結し、以降の判定は無視されます。
判定には=以外にもいろいろ比較演算子が使えます。比較演算子については関数のほうのIfの記事参照。
判定には=以外にもいろいろ比較演算子が使えます。比較演算子については関数のほうの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やメソッドの諸機能を、機能の名称から探せるまとめ記事です。
コメント