条件分岐と言えば、Excelの一般機能にあるIF関数があります。「マクロの記録にIF関数を使って・・・」という使い方もできます。このIF関数は「セルの値が●ならば××」というようなときに使います。
ここで説明したいプログラム上の条件分岐も意味合いは同じです。しかし対応できる幅がまったく変わってきます。
最大の特徴はプログラム上の条件分岐は条件に応じて処理できる方向性を自由に決められるということです。
一般機能のIF関数ではセルに対して「データが正しい」とか「データが間違っています」的な使い方はできますが下記のような使い方ができません。
例えば、下記のような表があった時にセル「C5」に合計を入れる作業を「マクロの記録」します。
ここで次のような条件を付け加えた場合にマクロの記録で対応できるか考えてみてください。
「もし、セルのC2:C4の中で1つでも空白があれば合計の処理をしない」
あるいはマクロの記録でシート名を「2012年度」として新規で作成します。
このマクロをもう一度実行するとどうなるでしょうか?
下記のようなエラーが表示されると思います。
これは「シートが見つからない」といった類の実行時エラーですが、本来ならば予防対策をできるエラー(エラーにしない)です。
(ちなみにこのエラーはもう1個あります。もし仮にシートが見つかっても「同じ名前のシート名(2012年度)」が既にあり、同名シートを作成できずに、エラーが発生します)
このようにマクロの記録で作ったマクロは「正しかろうが正しくなかろうが言われた通り動き(どうしようもなくなったらエラーに)ます」。
そこでVBAを使って、本来ならここで条件分岐処理を入れて、このようなエラーになる前にこんな形をとることができます。
上記の例ではいずれも、条件が満たされてないので処理を強制終了(VBAでいうと「Exit Sub」)にしています。
こうすることでエラーを回避したり、利用の方法を正しい方向へ導くことができます。
イメージでいえば、一般機能のIF関数(条件分岐)は「点」としての動きで、VBA(プログラム)の条件分岐は「線(あるいは立体)」的に使うことができます。