VBA改行の全パターン解説|vbCrLf・vbLf・セル内・MsgBox

VBAで改行しようとしたら、うまくいかない…どの改行コードを使えばいいの?
VBAで改行を扱う場面は、セル内の改行、MsgBoxの改行、コードの改行の大きく3つがあります。しかし、それぞれで使う改行コードが異なるため、混同してしまう方が多いのが実情です。
この記事では、VBAで使うすべての改行パターンを場面別に整理し、コード例付きで解説します。改行コードの種類と使い分け、改行されないときの対処法、さらに改行の削除・置換方法まで網羅していますので、ぜひブックマークしてお使いください。
なお、VBAの基礎をまとめて学びたい方は「Excel作業を自動化!おすすめVBA学習の進め方」も参考にしてみてください。
Sub 改行挿入マクロ()
Dim ws As Worksheet
Set ws = ActiveSheet
Dim i As Long
For i = 2 To 4
ws.Cells(i, “B”).Value = _
ws.Cells(i, “A”).Value & vbLf & _
ws.Cells(i, “C”).Value
Next i
MsgBox “改行付きテキストを生成しました”
End Sub
| A | B | C | |
|---|---|---|---|
| 1 | 姓名 | 結合結果 | 住所 |
| 2 | 田中太郎 | 田中太郎 東京都新宿区 |
東京都新宿区 |
| 3 | 鈴木花子 | 鈴木花子 大阪府大阪市 |
大阪府大阪市 |
| 4 | 佐藤一郎 | 佐藤一郎 愛知県名古屋市 |
愛知県名古屋市 |
☝ vbLfはセル内改行、vbCrLfはMsgBox内改行に使い分けます
VBAの改行コードとは?3種類の違いを理解しよう
VBAで使える改行コードには主に3種類あります。まずはそれぞれの違いを把握しておきましょう。
vbCrLf(キャリッジリターン+ラインフィード)
vbCrLfは、Windowsで標準的に使われる改行コードです。キャリッジリターン(CR:カーソルを行頭に戻す)とラインフィード(LF:次の行へ移動する)を組み合わせた2文字で構成されています。
内部的には Chr(13) & Chr(10) と同じ意味です。MsgBoxやテキストファイルへの書き込みなど、多くの場面で使用します。
vbLf(ラインフィード)
vbLfは、ラインフィード(LF)のみの改行コードです。内部的には Chr(10) と同じです。
Excelのセル内改行では、このvbLfが使われます。セル内の改行をVBAで扱う場合は、vbCrLfではなくvbLfを使う必要がある点が最大のポイントです。
vbCr(キャリッジリターン)
vbCrは、キャリッジリターン(CR)のみの改行コードです。内部的には Chr(13) と同じです。
Macの古い改行コードとして知られていますが、現在のVBA開発では使用頻度は低めです。特別な理由がなければ、vbCrLfまたはvbLfを使うのがよいでしょう。
vbNewLineとの違い
vbNewLineは、実行環境に応じて適切な改行コードを自動的に選択する定数です。Windows環境ではvbCrLfと同じ動作になります。
Mac版Excelでも動作するクロスプラットフォームなマクロを作成する場合は、vbNewLineの使用が推奨されます。ただしWindows環境のみで使う場合は、vbCrLfで問題ありません。

まずは「セル内はvbLf」「それ以外はvbCrLf」と覚えておけばOKです!
改行コード一覧表【早見表】
VBAで扱う主な改行コードを一覧にまとめました。
| 定数・関数 | 値 | 説明 | 主な用途 |
|---|---|---|---|
| vbCrLf | Chr(13) & Chr(10) | CR+LF(Windows標準) | MsgBox、テキストファイル |
| vbLf | Chr(10) | LF のみ | セル内改行 |
| vbCr | Chr(13) | CR のみ | Mac(旧形式)、特殊用途 |
| vbNewLine | 環境依存 | OS に応じた改行コード | クロスプラットフォーム対応 |
| Chr(10) | vbLf と同義 | ラインフィード | セル内改行(定数を使わない場合) |
| Chr(13) & Chr(10) | vbCrLf と同義 | CR+LF | MsgBox 等(定数を使わない場合) |
この表は場面ごとの使い分けに迷ったときの参照用としてお使いください。
MsgBoxで改行する方法【vbCrLf】
MsgBox(メッセージボックス)で改行するには、vbCrLfを使います。文字列の連結演算子(&)でvbCrLfを挟むだけです。
基本的な改行の書き方(vbCrLf)
最もシンプルなMsgBoxの改行方法です。
Sub MsgBox_BasicNewLine()
MsgBox "1行目のテキスト" & vbCrLf & "2行目のテキスト"
End Sub実行すると、メッセージボックス内で「1行目のテキスト」と「2行目のテキスト」が2行に分かれて表示されます。
Chr(13) & Chr(10) を使う方法
vbCrLfの代わりに、Chr関数を使って同じ結果を得ることもできます。
Sub MsgBox_ChrNewLine()
MsgBox "1行目" & Chr(13) & Chr(10) & "2行目" & Chr(13) & Chr(10) & "3行目"
End Sub動作はvbCrLfとまったく同じです。コードの可読性の面では、vbCrLf定数を使うほうがおすすめです。
複数行のメッセージを見やすく作るサンプル
実務では、MsgBoxに複数行の情報を表示するケースがよくあります。変数と組み合わせた実用的なコード例を紹介します。
Sub MsgBox_MultiLine()
Dim userName As String
Dim totalCount As Long
userName = "田中"
totalCount = 150
Dim msg As String
msg = "処理が完了しました。" & vbCrLf
msg = msg & vbCrLf
msg = msg & "【処理結果】" & vbCrLf
msg = msg & "担当者: " & userName & vbCrLf
msg = msg & "処理件数: " & totalCount & " 件"
MsgBox msg, vbInformation, "完了通知"
End Subこのように変数msgに改行付きの文字列を連結していくと、長いメッセージでもコードが読みやすくなります。

MsgBoxの改行はvbCrLf一択!Chr関数より定数のほうが読みやすいのでおすすめです
VBAの変数宣言(Dim)について詳しく知りたい方は「VBAのDimとは?変数宣言の基本を解説」をご覧ください。
セル内で改行する方法【vbLf】
Excelのセル内に改行を入れるには、MsgBoxとは異なりvbLfを使います。ここが最も間違えやすいポイントです。
vbLfでセル内改行を入れる
Sub Cell_NewLine()
Range("A1").Value = "1行目" & vbLf & "2行目" & vbLf & "3行目"
Range("A1").WrapText = True '折り返し表示を有効にする
End Subセル内の改行はvbLf(= Chr(10))です。vbCrLfを使ってもエラーにはなりませんが、意図しない動作になる場合があるため、必ずvbLfを使いましょう。
Chr(10) を使う方法
vbLfの代わりにChr(10)でも同じ結果になります。
Sub Cell_NewLine_Chr()
Range("B1").Value = "名前: 佐藤" & Chr(10) & "部署: 営業部"
Range("B1").WrapText = True
End Sub折り返し表示(WrapText)の設定が必須
セル内で改行を入れても、セルの折り返し表示(WrapText)が無効になっていると、改行が見えません。VBAから折り返し設定を有効にするには、以下のように書きます。
Sub SetWrapText()
'特定のセルに設定
Range("A1").WrapText = True
'範囲全体に設定
Range("A1:D10").WrapText = True
'シート全体に設定
Cells.WrapText = True
End Sub
セル内改行で最も多い「改行されない」原因は、WrapTextの設定忘れです!
VBAコードを途中で改行する方法【アンダースコア】
VBAのコードそのものが長くなった場合、コードを途中で改行して見やすくすることができます。この場合は、半角スペース+アンダースコア( _)を使います。
行継続文字( _)の使い方
行末に半角スペースとアンダースコア( _)を記述すると、次の行に続けてコードを書くことができます。
Sub CodeLineBreak()
MsgBox "これは非常に長いメッセージです。" _
& vbCrLf & _
"2行目のメッセージです。", _
vbInformation, _
"タイトル"
End Subポイントは、アンダースコアの前に必ず半角スペースを入れることです。スペースがないとエラーになります。
改行できる場所とできない場所
行継続文字はどこにでも使えるわけではありません。
改行できる場所:
- 演算子(&, +, -, =など)の前後
- カンマの後
- 半角スペースのある位置
改行できない場所:
- 文字列リテラル(ダブルクォーテーション)の途中
- 変数名やキーワードの途中
- コロン(:)で結合したステートメントの途中
行継続は24行までの制限に注意
VBAでは、1つの論理行を最大25物理行(行継続24回)までしか分割できません。これを超えるとコンパイルエラーが発生します。極端に長いコードは、変数に分割するなどの工夫が必要です。
VBAのプロシージャ(SubやFunction)の基本については「VBAのFunctionとSubの違いを解説」もあわせてご確認ください。
VBAで改行されない原因と対処法
「VBAで改行を入れたのに改行されない」というトラブルは非常によくあります。原因と対処法を整理しました。
セル内改行が表示されない場合(折り返し設定)
セル内に改行コードを入れても、改行が表示されない場合の原因は以下のとおりです。
| 原因 | 対処法 |
|---|---|
| WrapText が False になっている | Range("A1").WrapText = True を追加する |
| vbCrLf を使っている | vbLf(またはChr(10))に変更する |
| セル幅が狭すぎる | 列幅を広げるか、AutoFit を使用する |
| セルの書式が「折り返して全体を表示」になっていない | 手動で書式設定を確認する |
改行コードの不一致(vbCrLfとvbLfの混同)
最も多い原因が、場面に合わない改行コードを使っているケースです。
- セル内に書き込む → vbLf を使う
- MsgBoxに表示する → vbCrLf を使う
- テキストファイルに書き込む → vbCrLf を使う
この使い分けを意識するだけで、改行に関するトラブルの多くは解消できます。
テキストファイルでの改行コードの違い
VBAからテキストファイルに書き出す場合、Windowsの標準改行コードであるvbCrLfを使用します。vbLfだけを使うと、メモ帳などの一部エディタで正しく改行されない場合があります。
Sub WriteTextFile()
Dim filePath As String
filePath = ThisWorkbook.Path & "\output.txt"
Open filePath For Output As #1
Print #1, "1行目" & vbCrLf & "2行目" & vbCrLf & "3行目"
Close #1
End Sub
「セルにはvbLf」「それ以外にはvbCrLf」を意識すればトラブルは激減します!
VBAで改行を削除・置換する方法
データ整形の場面では、セル内の改行を削除したり、別の文字に置き換えたりする処理がよく使われます。
Replace関数で改行を削除する
セル内の改行を削除するには、Replace関数でvbLfを空文字(””)に置換します。
Sub RemoveNewLine()
Dim targetCell As Range
For Each targetCell In Range("A1:A10")
If Not IsEmpty(targetCell) Then
targetCell.Value = Replace(targetCell.Value, vbLf, "")
End If
Next targetCell
End SubMsgBoxやテキストファイル由来の文字列から改行を削除する場合は、vbLfの部分をvbCrLfに変更してください。
改行を別の文字に置換する
改行をスペースやカンマに置換する場合も、Replace関数を使います。
Sub ReplaceNewLine()
Dim targetCell As Range
For Each targetCell In Range("A1:A10")
If Not IsEmpty(targetCell) Then
'改行をスペースに置換
targetCell.Value = Replace(targetCell.Value, vbLf, " ")
End If
Next targetCell
End SubClean関数との違い
VBAのClean関数(WorksheetFunction.Clean)は、印刷できない制御文字をすべて削除します。改行コードも制御文字に含まれるため、Clean関数でも改行を削除できます。
ただし、Clean関数はvbLf(Chr(10))は削除しますが、環境によってはvbCr(Chr(13))が残る場合があります。確実に改行を削除したい場合は、Replace関数で明示的に指定するほうが安全です。
改行コードの使い分け早見表(まとめ)
最後に、場面別の改行コードの使い分けをまとめます。
| 使用場面 | 推奨する改行コード | 備考 |
|---|---|---|
| MsgBox での改行 | vbCrLf | Chr(13) & Chr(10) でも可 |
| セル内の改行 | vbLf | Chr(10) でも可。WrapText = True が必要 |
| テキストファイルへの書き出し | vbCrLf | Windows 標準の改行コード |
| Debug.Print での改行 | vbCrLf | イミディエイトウィンドウ用 |
| InputBox のプロンプト改行 | vbCrLf | MsgBox と同じ |
| VBA コード自体の改行 | 半角スペース + _(アンダースコア) | 最大24回まで |
| Mac 対応が必要な場合 | vbNewLine | 環境に応じた改行コードを自動選択 |

迷ったらこの表を見返してくださいね。ブックマーク推奨です!
VBAの改行は、場面によって使う定数が異なるため最初は混乱しがちですが、基本は「セル内はvbLf、それ以外はvbCrLf」というルールを押さえておけば大丈夫です。
この記事で紹介したコード例を実際に動かして、改行コードの動作をぜひ体験してみてください。VBA全般の学習ロードマップについては「Excel作業を自動化!おすすめVBA学習の進め方」で紹介しています。
VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。
LINEでExcelを気軽に学べる
改行挿入マクロの動作をデモで確認
vbLfを使ったセル内改行の挿入結果を、下のインタラクティブデモで確認できます。
VBAマクロの実行結果は記事冒頭のインタラクティブデモで確認できます。ボタンを押すとアニメーションで動作をシミュレーションします。
実際の操作手順をクリックして体験できます。各ステップをクリックしてみましょう。
よくある質問(FAQ)
Q1. VBAのMsgBoxで改行するにはどうすればいいですか?
MsgBoxで改行するには、文字列の間にvbCrLfを挿入します。MsgBox "1行目" & vbCrLf & "2行目" のように記述してください。
Q2. VBAでセル内に改行を入れるにはどの改行コードを使いますか?
セル内改行にはvbLf(またはChr(10))を使います。vbCrLfではなくvbLfを使う点に注意してください。また、セルの「折り返して全体を表示(WrapText = True)」を有効にする必要があります。
Q3. vbCrLfとvbLfの違いは何ですか?
vbCrLfはCR+LF(Chr(13)+Chr(10))でWindows標準の改行コードです。vbLfはLF(Chr(10))のみで、Excelのセル内改行に使われます。MsgBoxやテキストファイルにはvbCrLf、セル内にはvbLfを使い分けます。
Q4. VBAで改行が反映されない(改行されない)のはなぜですか?
主な原因は3つあります。(1) セル内でvbCrLfを使っている(正しくはvbLf)、(2) セルの「折り返して全体を表示」が無効になっている、(3) コード内改行で半角スペース+アンダースコア( _)を正しく記述していない、のいずれかです。
Q5. VBAのコードを途中で改行するにはどうしますか?
行末に半角スペースとアンダースコア( _)を入力します。ただし、文字列リテラルの途中や変数名の途中では改行できません。また、行継続は最大24回までという制限があります。
Q6. VBAで改行を削除するにはどうすればいいですか?
Replace関数を使って改行コードを空文字に置換します。セル内の改行削除は Replace(文字列, vbLf, "") で実行できます。MsgBoxやテキストファイル由来の文字列の場合は、vbCrLfを指定してください。
Q7. vbNewLineとvbCrLfの違いは何ですか?
vbNewLineは実行環境(Windows/Mac)に応じて適切な改行コードを自動選択する定数です。Windows環境ではvbCrLfと同じ動作になります。クロスプラットフォーム対応が必要な場合はvbNewLineが推奨されます。
