Excel上級者

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

しんたろ。

VBAで改行しようとしたら、うまくいかない…どの改行コードを使えばいいの?

VBAで改行を扱う場面は、セル内の改行MsgBoxの改行コードの改行の大きく3つがあります。しかし、それぞれで使う改行コードが異なるため、混同してしまう方が多いのが実情です。

この記事では、VBAで使うすべての改行パターンを場面別に整理し、コード例付きで解説します。改行コードの種類と使い分け、改行されないときの対処法、さらに改行の削除・置換方法まで網羅していますので、ぜひブックマークしてお使いください。

なお、VBAの基礎をまとめて学びたい方は「Excel作業を自動化!おすすめVBA学習の進め方」も参考にしてみてください。

この記事を読むとできること
この記事で解説する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
下のデモで実行結果を確認できます
📊 住所録.xlsx – Excel
ABC
1 姓名結合結果住所
2 田中太郎 田中太郎
東京都新宿区
東京都新宿区
3 鈴木花子 鈴木花子
大阪府大阪市
大阪府大阪市
4 佐藤一郎 佐藤一郎
愛知県名古屋市
愛知県名古屋市
準備完了 100%
3件のセルに改行付きテキストが挿入されました!
☝ vbLfはセル内改行、vbCrLfはMsgBox内改行に使い分けます
この記事の目次
  1. VBAの改行コードとは?3種類の違いを理解しよう
  2. 改行コード一覧表【早見表】
  3. MsgBoxで改行する方法【vbCrLf】
  4. セル内で改行する方法【vbLf】
  5. VBAコードを途中で改行する方法【アンダースコア】
  6. VBAで改行されない原因と対処法
  7. VBAで改行を削除・置換する方法
  8. 改行コードの使い分け早見表(まとめ)
  9. LINEでExcelを気軽に学べる
  10. 改行挿入マクロの動作をデモで確認
  11. よくある質問(FAQ)

VBAの改行コードとは?3種類の違いを理解しよう

VBAで使える改行コードには主に3種類あります。まずはそれぞれの違いを把握しておきましょう。

VBA改行コード3種(vbCrLf・vbLf・vbCr)の使い分け図
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で扱う主な改行コードを一覧にまとめました。

定数・関数説明主な用途
vbCrLfChr(13) & Chr(10)CR+LF(Windows標準)MsgBox、テキストファイル
vbLfChr(10)LF のみセル内改行
vbCrChr(13)CR のみMac(旧形式)、特殊用途
vbNewLine環境依存OS に応じた改行コードクロスプラットフォーム対応
Chr(10)vbLf と同義ラインフィードセル内改行(定数を使わない場合)
Chr(13) & Chr(10)vbCrLf と同義CR+LFMsgBox 等(定数を使わない場合)

この表は場面ごとの使い分けに迷ったときの参照用としてお使いください。

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 Sub

MsgBoxやテキストファイル由来の文字列から改行を削除する場合は、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 Sub

Clean関数との違い

VBAのClean関数(WorksheetFunction.Clean)は、印刷できない制御文字をすべて削除します。改行コードも制御文字に含まれるため、Clean関数でも改行を削除できます。

ただし、Clean関数はvbLf(Chr(10))は削除しますが、環境によってはvbCr(Chr(13))が残る場合があります。確実に改行を削除したい場合は、Replace関数で明示的に指定するほうが安全です。

改行コードの使い分け早見表(まとめ)

最後に、場面別の改行コードの使い分けをまとめます。

使用場面推奨する改行コード備考
MsgBox での改行vbCrLfChr(13) & Chr(10) でも可
セル内の改行vbLfChr(10) でも可。WrapText = True が必要
テキストファイルへの書き出しvbCrLfWindows 標準の改行コード
Debug.Print での改行vbCrLfイミディエイトウィンドウ用
InputBox のプロンプト改行vbCrLfMsgBox と同じ
VBA コード自体の改行半角スペース + _(アンダースコア)最大24回まで
Mac 対応が必要な場合vbNewLine環境に応じた改行コードを自動選択

迷ったらこの表を見返してくださいね。ブックマーク推奨です!

VBAの改行は、場面によって使う定数が異なるため最初は混乱しがちですが、基本は「セル内はvbLf、それ以外はvbCrLf」というルールを押さえておけば大丈夫です。

この記事で紹介したコード例を実際に動かして、改行コードの動作をぜひ体験してみてください。VBA全般の学習ロードマップについては「Excel作業を自動化!おすすめVBA学習の進め方」で紹介しています。

Excel業務の自動化
その手作業、自動化しませんか?

VBA開発・GAS連携・Webアプリ化まで、
業務に合わせた最適な自動化をご提案します。

1,600部ツール販売実績
15年製造業の業務経験
無料で相談する →
初回相談無料・お見積りだけでもOK
期間限定でChatGPT✖︎Googleスプレットシートのコンテンツ配布中!

LINEでExcelを気軽に学べる

しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
Profile
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
プロフィールを読む

改行挿入マクロの動作をデモで確認

vbLfを使ったセル内改行の挿入結果を、下のインタラクティブデモで確認できます。

VBAマクロの実行結果は記事冒頭のインタラクティブデモで確認できます。ボタンを押すとアニメーションで動作をシミュレーションします。

💻 操作を体験してみよう!

実際の操作手順をクリックして体験できます。各ステップをクリックしてみましょう。

Microsoft Visual Basic for Applications – 改行テスト.xlsm
ファイル(F) 編集(E) 表示(V) 実行(R) デバッグ(D)
プロジェクト
📁 VBAProject
📂 標準モジュール
📄 Module1
‘ MsgBoxで改行する例(vbCrLf) Sub MsgBox改行デモ() Dim msg As String msg = “1行目” & vbCrLf & “2行目” & vbCrLf & “3行目” Debug.Print msg End Sub
‘ セル内改行の例(vbLf) Sub セル内改行デモ() Range(“A1”).Value = “上段” & vbLf & “下段” Range(“A1”).WrapText = True Debug.Print Range(“A1”).Value End Sub
‘ Chr(10)で改行する例 Sub Chr改行デモ() Dim s As String s = “A” & Chr(10) & “B” & Chr(10) & “C” Range(“B1”).Value = s Debug.Print s End Sub
イミディエイト ウィンドウ
1行目 2行目 3行目 ■ vbCrLfでMsgBoxが3行に改行されました
上段 下段 ■ vbLfでセル内改行が実行されました
A B C ■ Chr(10)で3つの文字が改行されました
✅ 改行コードを切り替えて実行結果を比較できます。タブをクリックして確認してください。
1 上のタブで改行コードを切り替え(vbCrLf / vbLf / Chr(10))
2 「F5 – マクロを実行」ボタンをクリック
3 イミディエイトウィンドウで改行結果を確認

よくある質問(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が推奨されます。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
しんたろ。
しんたろ。
Excel歴10年以上 → アプリ開発者
大手メーカーに15年以上勤務。製造部門で海外拠点の立ち上げ支援や、現場責任者として採算管理・納期管理・設備オペレートを経験。 2023年にDX人材育成プログラム第1期生として活動後、現在は製造現場のスケジュール運用を支えるアプリの企画・開発をメインに活動中。工程表示表作成の内製化SaaSを構築し、年間1,300万円のコスト改善を実現。 Excelによる業務改善で年間240時間の残業削減を達成した経験を活かし、ブログやSNSでも情報発信しています。
記事URLをコピーしました