条件

関数の引数で条件を指示して引数の値を返します。
制御構造の貧しいVBAですが、これでカバーできる部分もあるでしょう。

IIf(exp,result1,result2)
C言語等の三項演算子exp?result1:result2形式や、Excel関数のIfと同じです。
expが真ならresult1を、偽ならresult2を返します。

ただしこの関数は余計なことをするのが難点です。
条件式expの結果に関わらずresult1とresult2の両方を評価するため、例えば、以下のような使い方はできません。
c = IIF(a<>0,b/a,0)
意図してはbをaで割った結果を求めるのですが、もし除数aがゼロなら結果はゼロとして処理を続けたい、というものです。
普通の言語の場合、a=0なら0を返してb/aは無視しそうなものですが、余計なことにIIF関数ではb/aも評価するため「0で除算しました」とエラーを出してしまうのです。

エラートラップのためにこのような処理をあちこちに入れたのですが、テスト段階で全く意味を成さないことが判明し、ガッカリしてしまいました。
0除算だけではなく、配列の添字(index)なども評価対象となりますので、以下のような使い方もできません。
c = IIF(i<5,a(i),b(i-5))
iが5未満ならば配列aを、以上なら配列bを参照するつもりで書いているのですが、例えばi=0だとbの添字が-5と計算されるのでエラーになります。

なお、下記のSwitch関数も同様ですのでこの手のエラーの回避(代替え)には使えません。

Choose(index,result1,result2,..)
index以降の値の、index個目の値を返します。
1未満や項目数以上だとエラーになるので注意。
[例]
a=10
n=2
MsgBox Choose(n,a*2,a*3,a*7)
これを実行するとa*3、つまり30が表示されます。

Switch(exp1,value1, exp2,value2, ...)
expnが真の時、valuenを返す。
全て偽であればNullを返す
[例]前例と同じ事を書いてみます。
a=10
n=2
MsgBox Switch(n=1,a, n=2,a*2, n=3,a*3, n=4,a*7)
この場合は冗長になりますが
MsgBox Switch(n=1,a, n=2,a*2, n=3,a*3, n>=4,a*7)
このように4以上などのような記述もできます。
exp1から評価していき、真があればそれ以降は無視されます。
-