Excel VBA | コードを途中で改行する

Excel VBA VBA
スポンサーリンク

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
VB

NG な例(識別子を途中で切る)

' NG:プロパティ名の途中で改行している
Range("A1").Va _
lue = 10  ' エラー
VB

3. コロン : を使った同一行での複数命令

短い命令を続けたいときに便利。読みやすさとのトレードオフに注意。

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
VB

If 文で長い条件を分ける

If (a > 10 And _
    b < 5) Or _
   (c = "OK") Then
    MsgBox "条件を満たしました"
End If
VB

6. よくあるミスと対処法

  • アンダースコア前のスペース忘れ
    NG: a = 1_ → エラー
    OK: a = 1 _
  • アンダースコアのある行にコメントを書く
    NG:
a = 1 _ ' 値を代入
b = 2
VB

エラーになります。コメントを入れるなら次の行にするか、コメントだけの行を別に書く。

  • 識別子を途中で切る
    Range("A1").Valu_ e = 10 は不可。必ず Range("A1").Value = 10 のように。
  • 演算子の前後で分けるのが楽
    +& の直前/直後で改行すると読みやすく、エラーも出にくい。

7. 実際に VBA エディタで試す手順(初心者向け)

  1. Excel を開く → Alt + F11 で VBA エディタを開く。
  2. 挿入標準モジュール を選択。
  3. 以下のサンプルを貼り付けて 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
VB

8. 練習問題と解答

問題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
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました