VBAでSQL文を見やすく整形・改行するツールを作ってみた

SQL文をVBA用に整形・改行するツールを作ってみた

「VBAでSQL文が横に長いコードになってしまった。読みやすく改行したい」

「長いSQL文をアンダースコアで改行するのが面倒」

この記事はそんな方に向けて書いています。

VBAでSQL文を見やすく整形・改行するツール

Microsoft AccessでVBAを使っていると、長いSQL文と対峙する場面がでてきます。

アンダースコアで改行できるものの、行継続文字( _)の制限は24個まで。

SQL文を改行しすぎると「行継続文字( _)を使いすぎています。」と言われてしまいます。

そこで、長いSQL文を整形して見やすく改行するツールを作成しました。

まずはサンプルSQL文でお試しください。

元のSQL文

こちらにSQL文を記述します。

整形後のSQL

 OK!

VBA用に改行する

 OK!

プログラムの途中で改行するには?

AccessやExcelなどのVBAでソースコードを改行する場合もありますよね。

その場合は、改行したい文字の最後に「半角スペース」+「アンダースコア(_)」を使って「&」で文字をつなげます。

Sub kaigyou_code()

Dim kaigyou_text As String

'ソースコードを改行するには
'「半角スペース」と「アンダースコア」を使って
'改行します。

kaigyou_text = "1行目のテキスト" _
   & "2行目のテキスト" _
   & "3行目のテキスト" _
   & "4行目のテキスト" _
   & "5行目のテキスト"
     
'kaigyou_textの値
'1行目のテキスト2行目のテキスト3行目のテキスト4行目のテキスト5行目のテキスト

MsgBox kaigyou_text, vbInformation, "メッセージボックス"
    
End Sub 

注意点としては、アンダースコアを使えるのが24個までという点です。

それ以上使おうとすると、「改行文字を使いすぎています。」というメッセージが表示されます。

「行継続文字を使いすぎています」というメッセージ。
改行文字(_)を使いすぎています。

Microsoftのヘルプを参照すると以下の通り。

コードには、行連結文字と共に、または24行継続文字を1行で結合した物理的な行が25を超えています。 一部の構成行を物理的に長くすることで必要な行連結文字数を減らすか、構造を複数のステートメントに分割してください。

Officeデベロッパーセンター「行連結が多すぎます」

ソースコードを25行を超えて改行したい場合は?

そのような場合は、文字列を1行ごとに変数に代入してくっつけていきましょう。

Sub kaigyou_code()

Dim kaigyou_text As String

'ソースコードを25回以上改行するには
'1行ずつ変数に代入して改行しましょう。

kaigyou_text = "1行目のテキスト"
kaigyou_text = kaigyou_text  & "2行目のテキスト"
kaigyou_text = kaigyou_text  & "3行目のテキスト"
kaigyou_text = kaigyou_text  & "4行目のテキスト"
kaigyou_text = kaigyou_text  & "5行目のテキスト・・・100行目のテキスト"
     
'kaigyou_textの値
'1行目のテキスト2行目のテキスト3行目のテキスト4行目のテキスト5行目のテキスト・・・100行目のテキスト

MsgBox kaigyou_text, vbInformation, "メッセージボックス"
    
End Sub 

これで25行を超えても改行することができます。

長いソースコードを改行した場合のメッセージ1
コードの実行結果

メッセージも改行したい場合は?

「MsgBox関数」で表示するテキストも改行したい場合は、

改行したい場所に「vbCrLf」を追加しましょう。

Sub kaigyou_code()

Dim kaigyou_text As String

'ソースコードを25回以上改行するには
'1行ずつ変数に代入して改行しましょう。

kaigyou_text = "1行目のテキスト"
kaigyou_text = kaigyou_text  & "2行目のテキスト" & vbCrLf
kaigyou_text = kaigyou_text  & "3行目のテキスト" & vbCrLf
kaigyou_text = kaigyou_text  & "4行目のテキスト" & vbCrLf
kaigyou_text = kaigyou_text  & "5行目のテキスト・・・100行目のテキスト"
     
'kaigyou_textの値
'1行目のテキスト2行目のテキスト3行目のテキスト4行目のテキスト5行目のテキスト・・・100行目のテキスト

MsgBox kaigyou_text, vbInformation, "メッセージボックス"
    
End Sub 

「vbCrLf」を付けた箇所で改行されます。

VBAのMsgBox関数でテキストを「vbCrLf」で改行した場合のメッセージ
コードの実行結果

さいごに

SQL文のフォーマット方法は、人それぞれに強いこだわりがあるようですね。

細かいフォーマットの指定はできませんが、いつか誰かのお役に立てれば幸いです。

それではまた!