適材適所

PowerShellやVBAなどのプログラミングに関すること、キャリア、子育ての3本で書いていきます

VBAの「行継続文字(_)を使いすぎています」について

VBAでプログラミングをしていたら、こんなエラーが。

行継続文字(_)を使いすぎています。

f:id:shinmai_papa:20201007143435p:plain

どうやら行連結(_)は24個までしかできない仕様とのこと。

行連結が多すぎます | Microsoft Docs

この時は、Jsonをコード内に直に書いており、少しでも可読性を良くするために行継文字を使っていました。

そもそもこの行為自体が唾棄すべき行為ですが・・・。

また、多くの良識ある人は普通は行継文字を24つも使うなんてことはまずあり得ず、

このメッセージに遭遇することはないと思いますが・・・。

結論から言うと、こんなメッセージが出るほど、改行を使わないようにしましょうということなんですが、

このメッセージが出てきたときの苦し紛れの対処法を紹介したいと思います。

行継文字とは

行の最後に_(アンダーバー)を付けると、行が続いていると認識されます。

Sub test()
'横に長くて見づらい
If IsDate("2020/11/40") Or IsNumeric("2020/11/40") Or IsObject("2020/11/40") Then
End If
'少しだけ見やすい
If IsDate("2020/11/40") Or _
IsNumeric("2020/11/40") Or _
IsObject("2020/11/40") Then
End If
End Sub

使用する場面としては、

・条件式が複数あって1行で書いてしまうと可読性が著しく損なわれるため、可読性を保つ

・少し長めの定数を定義するときに改行を入れて可読性を保つ

くらいでしょうか。

ちなみに固定文字を連結する場合は、行継文字の他に、&が必要になります。

Const hoge As String = "test:test" & _
"aaaa:bb" & _
"cccc;cccccc" & _
"d:vv"

そもそも可読性をあげるための継行文字ですが、

特に固定文字の場合は、& _と文字が多いことから、

多様し過ぎると可読姓も下がりますね。

基本的にはあきらめましょう

ここまで改行が必要なコードは、リーダブルなコードではないことが容易に予想されるので、

あきらめて他の方法を模索することが第一です。

特にifなどの条件式で24個以上の条件があるような場合は素直にロジックを見直すことをお勧めします。

固定文字の場合はテキストファイルやシートなど外部に保存する手も

固定文字の可読性を高めるために使っている場合はまだ救いがあります。

そもそも固定文字をコードの中に書くこと自体があまりリーダブルで保守性の高いコードではないですね(私のことですが)

ExcelのVBAならあらかじめシート内に文字列を書き出しておき、コード内に可読性の悪い文字を書かない

ということが考えられます。

また、何かしらの理由でシートが使えない場合やAccessやWordなど、

Excel以外のVBAの場合は、テキストファイルに保存しておくことも手です。

テキストファイルならいくら改行しようが関係なしです。

また、継行文字も不要なので可読性も抜群です!!

まぁテキストファイルの読み込みのコードが増えますが・・・。

基本的には継行文字は最小限にしましょう

ありきたりな結論ですが、継行文字がいくら24個まで使えるとしても、使用はほどほどにしましょう。

どうしても多くなってしまう場合は、他の手を考えることを第一にしましょう。

終わりに

継行文字が多すぎる場合の対策について、簡単に紹介してみました。

対策といっても抜本的に対策するのが一番というなんとも歯切れの悪い結論ですが・・・

ここまでお読みいただき、ありがとうございました。