コード中の改行
VBA を使用している際、変数を同時にたくさん定義する場合や、関数の引数の定義する場合など、1 行に長いコードを記述しなければならないケースはないでしょうか?
この際、コードを途中で改行することができれば、プログラムの可読性を高めることが可能です。
この記事では、VBA でコードを途中で改行する方法について説明し、実際のプログラムと活用サンプルについても紹介します。
途中で改行する方法
VBA で改行を行うためには、コードの途中でスペース + アンダースコアを挿入することで次の行に続けてコードを記述することが可能です。
例えば、以下のようなコードがあった場合、
Sub Sample()
MsgBox "Hello, World!"
End Sub
途中で改行すると、以下のようになります。
Sub Sample()
MsgBox "Hello, " & _
"World!"
End Sub
活用シーン
関数の引数の定義
関数を定義する際、引数を多く必要としたり、Optionalな引数を用意する場合、コードが長くなりがちです。
Public Sub SampleProcess(ByRef sheet As Worksheet, ByRef previousRange As String, Optional ByRef currentRange As String = "", Optional ByRef newRange As String = "")
' --------------
' ...処理部分...
' --------------
End Sub
これを改行した場合、以下のようになります。 変数の数と内容が整列され、可読性が向上します。
Public Sub SampleProcess( _
ByRef sheet As Worksheet, _
ByRef previousRange As String, _
Optional ByRef currentRange As String = "", _
Optional ByRef newRange As String = "")
' --------------
' ...処理部分...
' --------------
End Sub
複雑な IF 文
IF 文に複雑な条件を指定する場合も、1 行が長くなってしまうことがあるかと思います。
Sub SampleProcess(ByVal num1 as Long, ByVal num2 as Long, ByVal num3 as Long)
Dim result As String
If num1 > 0 And num2 > 0 And num3 > 0 And num1 + num2 + num3 > 50 Then
result = "True"
Else
result = "False"
End If
MsgBox result
End Sub
これを改行すると以下のようになります。 改行箇所は自由ですが、IF 文の場合は条件式ごとではなく、ある程度の文字数を基準に改行するほうが可読性が高いように思います。
Sub SampleProcess(ByVal num1 as Long, ByVal num2 as Long, ByVal num3 as Long)
Dim result As String
If num1 > 0 And num2 > 0 And _
num3 > 0 And num1 + num2 + num3 > 50 Then
result = "True"
Else
result = "False"
End If
MsgBox result
End Sub
注意点
VBA でコードを途中で改行することによって、可読性が向上することは前述の通りです。ただし、途中で改行する際には、以下のような注意点があります。
改行する位置に注意する
改行できるのは、単語と単語の間のみです
変数名や予約語の途中、文字列リテラル("...")の途中で改行すると、コンパイルエラーになります。長い文字列は "abc" & _ のように分割して連結してください。
' NG: 文字列の途中で改行している
MsgBox "Hello, _
World!"
' OK: 文字列を分割して連結する
MsgBox "Hello, " & _
"World!"
アンダースコアの前にはスペースが必要
行継続文字は「スペース + アンダースコア」で、アンダースコアは行の最後の文字でなければなりません。アンダースコアの後ろにスペースやコメントを書くとエラーになります。
' NG: 行継続文字の後ろにコメントを書いている
MsgBox "Hello, " & _ ' コメント
"World!"
継続できる行数には上限がある
1 つのステートメントに使用できる行継続文字は最大 24 個(合計 25 行)までです。それ以上に長くなる場合は、処理を分割するか、変数にいったん代入するなどして整理しましょう。
コメント行は継続できない
コメント(' から始まる行)の末尾に _ を付けても次の行はコメントになりません。複数行のコメントは各行に ' を付けてください。
インデントを揃える
途中で改行する際には、インデントを揃えることが望ましいです。サンプルで紹介した関数の引数がよい例かと思います。
インデントを揃えることによって、コードのブロックを区別しやすくなり、コードの可読性が向上します。
コード規約に従う
複数人が操作するような Excel ファイルの場合、「この条件で改行する」といったコード規約を統一しておくべきです。
プロジェクト内で一貫したコーディングスタイルを使用することで、可読性が高く、保守性が高いコードを書くことができます。
以上のような注意点を抑えて、VBA でコードを途中で改行することによって、可読性を向上させましょう。