Excel VBA > Excel上級:マクロ > マクロの記録ではできないこと(条件分岐)
このエントリーをはてなブックマークに追加

マクロの記録ではできないこと(条件分岐)

マクロの記録は条件で処理を分けることができない

マクロの記録はとても便利ですが、どうしてもマクロの記録だけでは対応ができないものもあります。
とはいえ、プログラムに慣れてない場合はマクロの記録を使って、「たたき台」を作り、VBAという言語を使って勝手よく作っていく(作り直していく)形もよくある話です。
今回は読んで字のごとくですが、マクロの記録では条件分岐できる範囲が非常に限定的です。その点について説明したいと思います。

一般機能のIF関数と何が違うのか

条件分岐と言えば、Excelの一般機能にあるIF関数があります。「マクロの記録にIF関数を使って・・・」という使い方もできます。このIF関数は「セルの値が●ならば××」というようなときに使います。
ここで説明したいプログラム上の条件分岐も意味合いは同じです。しかし対応できる幅がまったく変わってきます。
最大の特徴はプログラム上の条件分岐は条件に応じて処理できる方向性を自由に決められるということです。
一般機能のIF関数ではセルに対して「データが正しい」とか「データが間違っています」的な使い方はできますが下記のような使い方ができません。

プログラム上の条件分岐とは

例えば、下記のような表があった時にセル「C5」に合計を入れる作業を「マクロの記録」します。

ここで次のような条件を付け加えた場合にマクロの記録で対応できるか考えてみてください。
「もし、セルのC2:C4の中で1つでも空白があれば合計の処理をしない」

あるいはマクロの記録でシート名を「2012年度」として新規で作成します。


このマクロをもう一度実行するとどうなるでしょうか?

下記のようなエラーが表示されると思います。

これは「シートが見つからない」といった類の実行時エラーですが、本来ならば予防対策をできるエラー(エラーにしない)です。
(ちなみにこのエラーはもう1個あります。もし仮にシートが見つかっても「同じ名前のシート名(2012年度)」が既にあり、同名シートを作成できずに、エラーが発生します)

このようにマクロの記録で作ったマクロは「正しかろうが正しくなかろうが言われた通り動き(どうしようもなくなったらエラーに)ます」。
そこでVBAを使って、本来ならここで条件分岐処理を入れて、このようなエラーになる前にこんな形をとることができます。

上記の例ではいずれも、条件が満たされてないので処理を強制終了(VBAでいうと「Exit Sub」)にしています。
こうすることでエラーを回避したり、利用の方法を正しい方向へ導くことができます。
イメージでいえば、一般機能のIF関数(条件分岐)は「点」としての動きで、VBA(プログラム)の条件分岐は「線(あるいは立体)」的に使うことができます。

カテゴリ:Excel上級:マクロ