PR

【VBA】If文を一行で記述する方法【Access,Excel】

Office
この記事にはアフィリエイト広告および広告が含まれています。

今回はOfficeのVBAで、If文を一行で記述する方法を紹介します。

If文を一行で記述する方法

If文は通常、以下のように記述します。

If ( 条件式 ) Then
    処理
End If

これを一行で書くと、以下のようなコードになります。
「End If」を記述しないことで、実現できます

If ( 条件式 ) Then 処理

Else有りでも一行で書けます。

If ( 条件式 ) Then 処理1 Else 処理2

ElseIfを使う場合は一行では書けないようです。

そもそも、一行で書いた方が良い?

If分を一行で書くと見た目がすっきりして、あたかも「かしこいコード」に見えますが、
必ずしも万人にとって読みやすいと思う記述方法ではないと私は思います。

コードは、自分にも他人にも読みやすいものであるべきです。

なので、
一行で書くと読みやすいコードになると思うのであれば、一行で書いた方が良いし、
一行で書くと”もしかしたら”読みにくいコードになるかもしれないと思うのであれば、分けて書いた方が良いと思います。

例えば、こういったケースはどちらが読みやすいでしょうか。

例)ある関数内で、対象フラグが9(エラーフラグ)なら即リターンする

If (TargetFlg = 9) Then Exit Function

If (TargetFlg = 9)
  Then Exit Function
End If

私なら①の方がスコープが狭まるので読みやすいです。
内容も複雑ではないので、すぐに理解できます。
ただ②も素直なので、どちらを読みやすいと思うかは人によるかもしれませんね。

例)取得した日付が10文字(YYYY/MM/DD)ならそのまま返し、
  異なれば(YYYYMMDD)、 10文字(YYYY/MM/DD) にして返す関数

If (Len(TargetDay) = 10) Then DayFormat = TargetDay Else DayFormat = Left(TargetDay, 4) & "/" & Mid(TargetDay, 5, 2) & "/" & Right(TargetDay, 2)

If (Len(TargetDay) = 10) Then
  DayFormat = TargetDay
Else
  DayFormat = Left(TargetDay, 4) & "/" & Mid(TargetDay, 5, 2) & "/" & Right(TargetDay, 2)
End If

私なら②の方が素直で読みやすいです。
①は一行にすると読みづらすぎます!
恐らく他の人からしても②の方が読みやすいのではないでしょうか。
Elseを使う時点で分けた方がいいかもしれませんね。

ということで、判断に迷ったら
「一行で書くことで、自分や他人にとって読みやすくなるか」を考えて記述すると良いと思います。

以上です。
今回の記事が何かの参考になれば幸いです。ありがとうございました♪

タイトルとURLをコピーしました