VBAと日々のこぼれ話

  1. VBA

Ifステートメントの記述論争(という名の記述方式)

ステートメントでもかなり初歩的で簡単、だからこそなのか記述でよく話題に挙がります。

よく話題に挙がる記述について二つの論争として紹介します。

論争1.End Ifを付けるか付かないか
論争2.Boolean型変数の判定に「= True」は必要か不必要か

サンプルコード

論争1.End Ifを付けるか付かないか

IFステートメントのうち処理分岐(Else)が入らない場合、2パターンの書き方があります。

A.一行で書き切る(End Ifなし)
B.必ず三行以上書く(「If」と「End If」で挟む)

1行で書ききっているのに末尾に「End If」まで付けて、何がエラーになっているのか分からずに見当違い(実は正しい)な箇所を修正してしまってはまってしまう新人さんを見かけたことがあります。

簡単だからこそ見落として、はまってしまうようです。

そう、Aの末尾に「End If」を付けたり、Bの「End If」を省略すると実行時にコンパイルエラーが発生します。

どちらが最適か

時と場合によります。

処理が少ないければ1の方がすっきり見えますし、多ければ2の方がまとまってみえます。

最終的には好みの問題になると思いますが、少なくとも一つのプロシージャ内で1と2を併用するのはいただけません。

可視性・可読性が低くなりなるからです。
(勿論、パターンAと「Else」の入る処理分岐(「End If」必須)が共存するのは問題ないです)

個人的意見

個人的には、三行以上パターンが好きです。

入れ子が続くようなコードの場合は、インデントが付けられていることによってどこまでがどのIfステートメント内の処理なのかが視覚的に追いやすいからです。

【スポンサーリンク】



論争2.Boolean型変数の判定に「= True」は必要か不必要か

これは、結構もめます。

どちらも同じ動きをするという意味では、どちらも正解です。

ただし、パターンCのように「= True」を付けている方は余計な比較を行っています。

Boolean型の変数はそもそもTrue OR Falseの二択で、かつIfステートメントはその条件がTrue OR Falseの処理分岐を行うステートメントな訳ですから。

どうしてBoolean型変数の判定に「= True」を付けているものが浸透しているか

正解はパターンDなのですが、パターンCの方実は正解なの?というくらいにBoolean型変数の判定に「= True」を付けているコードは世の中に浸透しています。

よく見かける理由(実体験)としては

①他の変数のIfステートメントと形式を揃えた方が分かりやすい
②①由来のコーディング規約があるため(仕方なく)
③Ifステートメントでは「 = XX」の形をとらないといけないという思い込み(よく分かっていない)

個人的意見

①②に関して、私は肯定的です。

個人で使うものは個人の自由ですが、不特定多数のメンバーが携わっている(その可能性がある)場合は彼らのスキルはばらばらです。

VBA一年目かもしれないし、ベテランの方かもしれません。

初心者にとっては、全てのIf文の処理が揃っている方が読み間違いが少ないのはよく分かります(出来る人には違和感しかないのも分かります)

本来は、Boolean型変数名をBoolean型であることが分かるように名付けるなどの工夫をして、無駄な処理を減らすべき(本来の正しい姿で使うべき)だというのはごもっともなのですが、世の中それが出来ているPGMばかりではありません。

無駄ですが完全に誤っているではありませんし、そちらの方が見やすいという判断がなされているのであれば②で規約として縛り、妥協しても良いと思います。

方針が決まっていない方がよくないように思います。

ただし、③
これは、実務でVBAに携わる人はきちんと理解しておくべきです。

そもそもIfステートメントは

そもそもIfステートメントは、与えられた条件式によって処理をTrue(真)かFalse(偽)に「分岐」させるためのステートメントです。

If 条件式 (= True) Then
 条件式がTrue時の分岐
Else (= False)
 条件式がFalse時の分岐
End If

といった風に()内の記述はしませんが、TrueやFalseが隠れているのです。

これをきちんと踏まえたうえで、方針を決めて(受け入れて)コーディングしていくべきだと思います。

【スポンサーリンク】



VBAの最近記事

  1. Excelシートの最終行を取得したい その1

  2. 【VBA】未だに苦手としていること

  3. 【VBA】モジュール先頭に記述する4種類のOption キーワード ステートメント

  4. 【VBA】同じ階層体系のフォルダを量産したい

  5. VBAの腕を知るための3つの短い質問を考える

関連記事

【スポンサーリンク】




PAGE TOP