VBA の「改行(行継続)」を初心者向けにやさしく、例題付きで詳しく説明します。
VBA(Excel のマクロ言語)は「1 行が 1 命令(ステートメント)」とみなされます。長い命令を読みやすく書きたいときや、複数の命令を同じ行に詰めたいときは 行継続(改行のルール) を正しく使う必要があります。ここでは基本ルール、よく使う書き方、よくあるミス、練習問題(解答付き)まで一気に説明します。
1. 基本ルール(超かんたん)
- 普通の改行 は「命令の終わり」を意味する → 無理に途中で改行するとエラーになる。
- 同じ行に複数命令を書く ときは
:(コロン)で区切る。
例:a = 1 : b = 2 : c = a + b - 1 つの命令を複数行に分ける ときは行末に半角スペース+アンダースコア
_を置く(これを行継続)。
例:
total = 100 _
+ 200 _
+ 50
VB注意:アンダースコアの前には必ず半角スペースが必要です(... _)。..._ のようにスペースを省略するとエラーになります。
2. 行継続(アンダースコア _ )の書き方とルール
書き方の要点
- 行末に
_(半角スペース + アンダースコア)を書けば、次の行とつながる。 - 行継続のある行の右側には何も書けない(コメント
’もダメ)。 - 変数名・関数名・プロパティ名の途中で区切らない(例:
Range("A1").Va_ lueは NG)。必ずトークン(意味のまとまり)の区切りで改行する。 - ドット
.(プロパティアクセス)の直前直後、演算子(+ - * / &)の前後、カンマ,の後など「区切りの良い場所」で改行する。
OK な例(分かち書きが自然な場所)
' 関数の引数が長い場合
MsgBox "処理が完了しました。" & vbCrLf & _
"次のステップへ進んでください。"
' 式が長い場合
result = a * (b + c) _
+ d * e
VBNG な例(識別子を途中で切る)
' NG:プロパティ名の途中で改行している
Range("A1").Va _
lue = 10 ' エラー
VB3. コロン : を使った同一行での複数命令
短い命令を続けたいときに便利。読みやすさとのトレードオフに注意。
Range("A1").Value = "Hello" : Range("A2").Value = "World"
VB上のように書けますが、長い処理は複数行で書く方が可読性高いです。
4. 文字列を複数行に分けるときの注意(& と行継続の組合せ)
文字列を連結して複数行に分けるときは & を使い、行継続でつなぎます。
例:
Dim msg As String
msg = "このメッセージはとても長いので、" & _
"複数行に分けて書いています。" & _
"最後に表示します。"
MsgBox msg
VB※ & の前にスペースを置くと読みやすい(& _ のように演算子の後で改行するのが自然)。
5. With ブロックや If 文での行継続例
With ブロック内の長いプロパティ設定
With Worksheets("Sheet1")
.Range("A1").Value = "開始" : .Range("A2").Value = "作業中"
.Range("A3").Value = "完了"
End With
VBIf 文で長い条件を分ける
If (a > 10 And _
b < 5) Or _
(c = "OK") Then
MsgBox "条件を満たしました"
End If
VB6. よくあるミスと対処法
- アンダースコア前のスペース忘れ
NG:a = 1_→ エラー
OK:a = 1 _ - アンダースコアのある行にコメントを書く
NG:
a = 1 _ ' 値を代入
b = 2
VBエラーになります。コメントを入れるなら次の行にするか、コメントだけの行を別に書く。
- 識別子を途中で切る
Range("A1").Valu_ e = 10は不可。必ずRange("A1").Value = 10のように。 - 演算子の前後で分けるのが楽
+や&の直前/直後で改行すると読みやすく、エラーも出にくい。
7. 実際に VBA エディタで試す手順(初心者向け)
- Excel を開く →
Alt + F11で VBA エディタを開く。 挿入→標準モジュールを選択。- 以下のサンプルを貼り付けて
F5(実行)してみる。
Sub Sample_LineContinuation()
Dim msg As String
msg = "これは行継続のテストです。" & _
vbCrLf & "正しくつながっていると、" & _
vbCrLf & "2 行以上に分かれていても 1 つの文字列です。"
MsgBox msg
' 複数命令を一行で書く(コロン)
Range("A1").Value = "Hello" : Range("A2").Value = "World"
' 長い計算式を改行で読みやすく
Dim total As Long
total = 1000 + 2000 + _
3000 + 4000
MsgBox "合計 = " & total
End Sub
VB8. 練習問題と解答
問題1:次のコードはエラーになります。正しく直してください。
total = 10 + 20_ + 30
VB解答1:
total = 10 + 20 _
+ 30
VB問題2:長いメッセージを MsgBox で表示するコードを 2 行に分けて書いてください(& と _ を使う)。
解答2:
Dim text As String
text = "これは長いメッセージです。" & _
"複数行に分けて記述しています。"
MsgBox text
VB問題3:以下の NG な行を正しく直してください(識別子途中で改行)。
Range("B1").Valu _
e = 123
VB解答3:
Range("B1").Value = 123
VB(識別子 Value を途中で分割しない)
9. 実務でのちょっとしたヒント
- 一行が長くなりすぎると見にくい → 適度に分けて可読性を優先。
- コメントは改行がない完全な行に書くと混乱しない(
' コメント)。 - 複雑な計算式や長い文字列は、変数に分けて代入してから使うとデバッグしやすい。
例:part1 = "..." : part2 = "..." : final = part1 & part2
