適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話やポイ活など気になったことも載せているブログです。

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

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

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

f:id:shinmai_papa:20201007143435p:plain

行の最後に「_」(アンダーバー)をつけることで次の行も命令が続いていると認識させるというVBAでのお約束事の一つである行継文字ですがどうやら行連結は24個までしかできない仕様とのこと。

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

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

そもそもJsonをVBAの中に直に書くという、この行為自体が唾棄すべき行為ですが・・・。

多くの良識ある人は行継文字を24つも使うなんてことは、まずないと思いますが・・・。

よって、このメッセージに遭遇することも普通はないと思いますが・・・。

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

しかし、どうしてもあきらめたくないというそこのあなたのために、このメッセージが出てきたときの苦し紛れの対処法を紹介したいと思います。

行継文字とは

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

 
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"

そもそも可読性をあげるための継行文字ですが、多様し過ぎると可読姓も下がりますね。

特に固定文字の場合は、& _と文字が多いのでとても見づらくなってしまいます。

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

24行にも渡る改行が必要なコードは、リーダブルなコードではないことが容易に予想されるので、あきらめて他の方法を模索することが第一です。

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

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

固定文字の可読性を高めるために改行を使っている場合は回避策があります。

そもそもの問題は、24行もの改行が必要な固定文字情報をコードの中にハードコーディングしてしまっていること。

固定文字をコードの中ではなく、外に逃がしてあげましょう。

例えばExcelのVBAならあらかじめセルのどこかに文字列を書き出しておき、そのセルを参照するようにするなどの対応が考えられます。

また、何かしらの理由でシートが使えない場合や、VBAはVBAでもAccessやWordなど、Excel以外のVBAの場合は、テキストファイルなどに保存しておくこともできます。

テキストファイルならいくら改行しようが関係なしで、継行文字も不要なので可読性もアップします。

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

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

どうしても行継文字が多くなってしまう場合は、その情報をコードの外に逃がす等、他の手を考えることを第一にしましょう。

終わりに

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

対策といっても、「行継文字の使用は最小限にしましょう」というなんともありきたりな結論に落ち着きましたね。

というわけで、行継文字はほどほどにして、リーダブルなコードを書くように努めしょう。

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