t-hom’s diary

主にVBAネタを扱っているブログです。

VBA 初心者向けコードについて議論

先日、インストラクターのネタ帳で以下の記事が公開された。

これに対し、エクセル セミナー 講師の山岡さんから、If文の条件が重複しているとのツッコミが。

話題になっているのは以下のコード。

 If tmp < 50 Then
 ElseIf 50 <= tmp And tmp < 70 Then
 ElseIf 70 <= tmp And tmp < 85 Then
 ElseIf 85 <= tmp Then
 Else
 End If

山岡さんはおそらく「50 <= tmp」を「50 < tmp」と書き換えてしまうリスクを懸念されているのではないかと思う。

私も業務で色々とマクロを書いてきたので、条件の重複は思わぬバグを生むという点は納得できる。

さて、この後のインストラクターのネタ帳で、反駁記事が公開された。

該当箇所はこちら

マクロ初心者の中に、
 If tmp < 70 Then
 ElseIf tmp < 85 Then
のElseIfが、AND条件になっていることを納得し辛いという方が、やっぱりいらっしゃいます。そんな場合に、より文章に近い、
 ElseIf 70 <= tmp And tmp < 85 Then
と書くことを、頭ごなしに否定すべきではないと考えています。

これはこれで確かに納得できる部分がある。

VBAを始めたばかりの初心者の方が、ネットで調べて目の前の業務をなんとかやっつけるというシチュエーションであれば、まずコードが動いた瞬間の喜びを味わって欲しいと思う。
その前提に立つと、この書き方はダメで、こうすべき、なぜなら~というのは、本当の初心者にとっては些細なことで、もう少しVBAが使えるようになってから覚えれば良いのではないか。

バグが出たら出たで、なぜそうなったのか考える材料になるのでそれも良いんじゃないかと思う。

また、IfからElseIfまでが一画面に収まらないようなケースでは、あえて書くことでメンテナンス性が良くなるとの意見も書かれている。なるほど!それのメリットは思いつかなかった。すごい。

ただ、ネットのサンプルを盲信してコピペ&微修正だけでプログラムを組み立てるケースもあり、クリティカルな作業にバグを混入させることもあるので、将来大きいプログラムを作ることになる人に向けて予防線があれば良かったのかもしれない。山岡さんの指摘を受けて伊藤さんがきちんと中~上級者へ向けて説明記事を書いているので、良い議論だと思う。

ここから先の議論は(あるとすれば)平行線をたどると思うので、何が正解というのは読んだ人が考えれば良いんじゃないかな。

考えるキッカケを与えてくれたお二人に感謝。

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。