Excel VBA 処理実行前にチェックを通すソースコードの記入方法例

Excel マクロ、VBA

スポンサーリンク

※これは、ある程度Excel VBAのコーディングを自分でやってる経験があるよって人向けの記事です。

VBAで使う英文字の用語をガンガン使いますので、食傷になりそうならまず、コーディング経験をしてみて下さい。

はじめに

Excel VBAに限らずプログラムでは、何かのチェックを通してフラグを立てたりして、そのチェックがOKでない場合は処理を中断する(OKの場合に初めて、それ以降の処理を実効する)、というのは殆ど必ず行うことだ。

そういう場合のコードの書き方として、私は次のようなやり方をよく使っている。

プログラムやる人から見れば、なにも特別なこともしてないと思いますけど、参考になるよって方が一人でもいれば幸いです。

例として、<testExe>というメインのマクロを実行するとする。
それを実行するか中断するか決めるチェックのプロセスは、<fncCheck>とかいうFunctionに別記する。


そんで、次のようにコーディングする。

解説①SubとFunction

他愛のないことですが、解説をちょっくら書いていきます。

まず私は、Subで囲まれる1つ1つの塊(プロシージャというけど)が長くなるのが嫌いで、ある程度の長さになったら分割する頻度がたぶん、人並み以上かと思う。

そんで多くの人が処理を分割するとき、Functionって多分あまり使わず、Subの方がずっと多く使われてると思う。

SubFunctionの違いといったら、Subが処理そのものを書くのに対してFunctionは答えを返したい時に使うと言われる。

んなこと言われても結局、実際にやってみると使い分け方が分からんって人も多いだろう。

実際、無理にFunctionを使わなくてもSubで大抵はなんとかなる。

答えを返すと言ったって、Subの中に変数を入れて受け渡しすればいいだけだしね。

んで私は、上記のような処理実行フラグ立てで結構、Functionを使う。

まず<fncCheck>というFunctionを、戻り値Booleanで記述する。

Boolean型って、デフォルト値がFalseで、明示的にセットしない限りTrueにはならない。

だから、処理実行フラグが立つ一番最後に1回だけTrueを指定してやれば良い。

解説②ソースコードの書き方・省き方

そして実行プロセスの方である<Sub testExe>の方だけど、生真面目に書くと

って感じになるのだろう。
しかし、こういう書き方の改善ポイントとして、次のようなことが挙げられる。

True・Falseについて

1行目:「 = False」という書き方はカッコ悪い。

これを極力省略して「Not」を有効活用した書き方が「Not fncCheck」って書き方。

逆に「If fncCheck = True Then」という書き方についてなら、「If fncCheck Then」で良い。

「=True」「=False」は、書かないようにしよう。

If~ThenとExit Sub

If fncCheck = False Then」の後は、もう処理を中断するExit Sub以外にやることは決して無いので、改行をせず直でExit Subを入れる。

そして、Exit Subを入れるのは、そこで完全に一区切りを入れるためだ。

その一区切りが入っている以上、IfExit Sub文の後にElseは入れず、直接に実際の処理部分を書いていく。

したがって、単に

で良い。

ファイルを開くダイアログの例

たとえば、<ファイルを開くダイアログを出して、それのキャンセルボタンが押されたら処理は実行しない>というのは当然いろいろなところでやる処理だが、これ一つとっても

と結構な長さになる。

だから私は、この「ファイルを開く」ダイアログにしてもFunctionに分けることが多い。

こんな感じだ。

=Falseなんて書かない


ここで、ファイルを開くダイアログにおいてキャンセルが押された場合の書き方について
If .Show=False Then
ではなく
If Not .Show
とスッキリした書き方にしている。

If Not bl Then Exit Sub
という書き方も同様だ。

やっぱりプログラムは行数を少なく、ダイエットして、エレガントに書いていきたい。

複雑に絡まったスパゲティプログラムになってはならない。要領の良いやり方を体で覚えていこう。

スポンサーリンク