【2026年7月最新】VBAの改行コード完全ガイド|vbCrLf・vbLf・Chr(10)の使い分け・MsgBox改行・セル内改行・Split分割・InStr検索まで実践コード集

「VBAのMsgBoxで文章を複数行に分けたい」「セルにAlt+Enterで改行を入れるVBAを書きたい」「取り込んだデータの改行を一括削除したい」——VBAの改行コードは用途によって使う定数が異なります。

VBAの改行コードにはvbCrLfvbLfvbCrの3種類があり、場面によって使い分けが必要です。この記事ではMsgBox改行・セル内改行・改行削除(Replace)・改行で分割(Split)・改行検索(InStr)まで全パターンを実践コードで解説します。

代表菅澤 代表菅澤
VBAでデータを整形する際に「改行コードが何種類もあって混乱する」という声をよく聞きます。Windows改行(vbCrLf)・Unix改行(vbLf)・旧Mac改行(vbCr)の違いと、どの場面でどれを使えばいいかを整理すると、急にすっきりします。
AI鬼管理山崎 AI鬼管理山崎
MsgBoxの改行はvbCrLf、セル内の改行はvbLf——この2つを覚えておくだけで実務の8割は対応できます。残りの2割は「改行削除・Split分割・InStr検索」で、この記事でその全てをコードとともに解説します。
✔️vbCrLf・vbLf・vbCrの違いとOSごとの改行コードの使い分けが分かる
✔️MsgBoxで複数行テキストを表示する方法が分かる
✔️セル内にAlt+Enter相当の改行を挿入するVBAが書ける
✔️VBAコードを途中で折り返す方法( _アンダースコア)が分かる
✔️Replace関数で全種類の改行を削除するコードが書ける
✔️Split関数で改行区切りの文字列を配列に分割できる
✔️InStr関数で改行が含まれるか判定するコードが書ける
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
【2026年7月最新】VBAの改行コード完全ガイド|vbCrLf・vbLf・Chr(10)の使い分け・MsgBox改行・セル内改行・Split分割・InStr検索まで実践コード集
VBAの改行コードを完全解説。vbCrLf・vbLf・Chr(10)の違いと使い分け、MsgBoxとセル内での改行方法、改行コードの削除・置換(Replace)・分割(Split)・含有検索(InStr)まで実践コード付きで解説します。

01 VBAの改行コードとは(vbCrLf・vbLf・vbCrの違い) CR・LF・CRLFの意味とOS別の標準改行コードを整理する

コンピュータで「改行」を表現するには、目に見えない特殊文字(改行コード)を使います。VBAでは3種類の改行コード定数が用意されています。

📚 用語解説

CR(キャリッジリターン)とLF(ラインフィード):テキストファイルで改行を表す2種類の制御文字。CR(Carriage Return・Chr(13))は昔のタイプライターで「先頭位置に戻る」動作から、LF(Line Feed・Chr(10))は「紙を1行分送る」動作から来た名前です。Windowsは改行に「CR+LF」の2文字を使い、Unixは「LF」のみ、旧MacOSは「CR」のみでした。VBAではvbCrLf=CR+LF、vbLf=LF、vbCr=CRを表す定数として使います。

定数Chr値OS標準使いどころ(VBA)
vbCrLfChr(13)+Chr(10)WindowsMsgBox・テキストファイル出力・変数内の行区切り
vbLfChr(10)Unix/MacExcelセル内改行(Alt+Enterに相当)
vbCrChr(13)旧MacOS現代ではほぼ使わない(旧システムデータの処理に稀に必要)
vbNewLine環境依存システムに依存OS問わず標準改行(通常vbCrLfと同じ)
💡セルにはvbLf、MsgBoxにはvbCrLfを使う

Excelのセルに改行を入れる場合はvbLf(Chr(10))、MsgBoxやテキストファイルにはvbCrLf(Chr(13)+Chr(10))を使います。セルにvbCrLfを使うと改行が2重になったり、セルの表示が崩れることがあります。「MsgBox = vbCrLf、セル = vbLf」と覚えておいてください。

02 MsgBoxで改行する方法 vbCrLfを使ってMsgBoxのメッセージを複数行に分割するコード

MsgBoxで複数行のメッセージを表示したい場合は、文字列と文字列の間にvbCrLfを挿入します。

Sub MsgBoxNewLine() '--- 基本的なMsgBox改行 --- MsgBox "1行目" & vbCrLf & "2行目" & vbCrLf & "3行目" '--- 変数に格納してから表示 --- Dim msg As String msg = "処理結果" & vbCrLf msg = msg & " 成功件数: 150件" & vbCrLf msg = msg & " 失敗件数: 3件" & vbCrLf msg = msg & " スキップ: 0件" MsgBox msg, vbInformation, "処理完了" '--- 空白行を入れる(vbCrLfを2回使う)--- MsgBox "重要なメッセージ" & vbCrLf & vbCrLf & "詳細はこちらを確認してください。" End Sub

03 セル内に改行を入れる方法(vbLf・Alt+Enter相当) セルの折り返し表示とvbLfの組み合わせでAlt+Enter改行を実現

ExcelでAlt+Enterを押してセル内改行するのと同じことをVBAで実現するには、vbLf(Chr(10))を使います。セルの「折り返して全体を表示する」設定も合わせて設定すると改行が見えるようになります。

📚 用語解説

WrapTextプロパティ(VBA):Excelセルで「折り返して全体を表示する」設定を制御するVBAプロパティ。「Cells(1,1).WrapText = True」でその設定をONにします。vbLfでセル内改行を挿入しても、WrapTextがFalseだと折り返しが表示されません。セル内に複数行のテキストを表示したい場合は、vbLfの挿入とWrapText = Trueをセットで設定してください。

Sub CellNewLine() '--- セルにvbLfで改行を挿入(Alt+Enter相当)--- Cells(1, 1).Value = "1行目" & vbLf & "2行目" & vbLf & "3行目" Cells(1, 1).WrapText = True '折り返し表示をONに '--- 複数セルの範囲に一括設定 --- Dim i As Long For i = 1 To 5 Cells(i, 1).Value = "商品名" & vbLf & "詳細説明" & vbLf & "型番: ABC-" & i Cells(i, 1).WrapText = True Next i End Sub
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 コード行を途中で折り返す方法(アンダースコア) 長いVBAコードを複数行に分割して読みやすくする方法

VBAコードが長くなった場合、行末に半角スペース + アンダースコア( _)を付けると次の行に続けて書けます。これは実際のプログラムの動作とは無関係で、コードの読みやすさのための機能です。

📚 用語解説

行継続文字(VBA):VBAコードを複数の物理的な行に分割するための記号。「半角スペース + _(アンダースコア)」を行末に付けると、次の行に続けて書けます。VBAエディタ(VBE)上では複数行に見えますが、実行時は1行のコードとして処理されます。引数が多いAPI呼び出しや長い文字列の結合式を見やすく整形する際によく使われます。

Sub LineContinuation() '--- 行継続文字 _ で長い行を分割 --- MsgBox "東京都千代田区" & vbCrLf _ & "大阪府大阪市" & vbCrLf _ & "愛知県名古屋市", _ vbInformation, _ "都市一覧" '--- 関数引数が多い場合も分割できる --- Range("A1:Z100").Replace _ What:="検索文字", _ Replacement:="置換文字", _ LookAt:=xlPart, _ MatchCase:=False End Sub
⚠️行継続文字の_の前には必ず半角スペースが必要

「 _」(半角スペース+アンダースコア)を使う際、スペースを忘れると「_」が識別子の一部として解釈されてエラーになります。また、コメント文('から始まる行)の後には行継続文字を使えません。「Cells(1,1).Value = "test" 'コメント _」のように書くとエラーになります。行継続文字を使う行にはコメントを書かないようにしてください。

05 改行コードを削除する方法(Replace関数) 全種類の改行コードを一括削除するフル対応コード

外部データを取り込んだ際に、改行コードが混在してデータ処理の妨げになることがあります。Replace関数を使って全種類の改行コードを一括削除できます。

'--- 全種類の改行コードを一括削除する汎用関数 --- Function RemoveAllNewlines(str As String) As String 'CRLFを先に処理してからCR・LFを個別処理 Dim s As String s = Replace(str, vbCrLf, "") 'Windows改行(CR+LF)を先に処理 s = Replace(s, vbCr, "") '旧Mac改行(CR)を処理 s = Replace(s, vbLf, "") 'Unix改行(LF)を処理 RemoveAllNewlines = s End Function Sub UseRemoveNewlines() Dim cell As Range For Each cell In Range("A1:A100") If cell.Value <> "" Then cell.Value = RemoveAllNewlines(CStr(cell.Value)) End If Next cell End Sub
💡vbCrLfを先に処理する理由

vbCrLf(CR+LF)はvbCrとvbLfが組み合わさった2文字です。Replace順序を誤って先にvbCrやvbLfを削除すると、vbCrLfのうちどちらか1文字だけが残ってしまいます。処理順は「①vbCrLf→②vbCr→③vbLf」の順番で必ず実行してください。

06 改行コードで文字列を分割する(Split関数) 複数行の文字列を1行ずつ配列に分割して処理するコード

複数行のテキストを1行ずつ処理したい場合、Split関数に改行コードを区切り文字として渡すことで文字列を配列に分割できます。

📚 用語解説

Split関数(VBA):VBAで文字列を指定した区切り文字で分割し、配列(String型の動的配列)に格納する関数。「Split("A,B,C", ",")」は「Array("A","B","C")」と同じ結果を返します。改行コードを区切り文字にする「Split(str, vbLf)」で、複数行テキストを1行ずつの配列に変換できます。For文と組み合わせて各行を処理する場合に使います。

Sub SplitByNewline() Dim str As String str = "東京都" & vbLf & "大阪府" & vbLf & "愛知県" '--- vbLf(セル内改行)で分割 --- Dim lines() As String lines = Split(str, vbLf) Dim i As Long For i = 0 To UBound(lines) Cells(i + 1, 2).Value = lines(i) 'B列に1行ずつ書き出す Next i '--- vbCrLfで分割する場合(MsgBoxやテキスト由来のデータ)--- Dim str2 As String str2 = "北海道" & vbCrLf & "青森県" & vbCrLf & "岩手県" Dim lines2() As String lines2 = Split(str2, vbCrLf) Debug.Print UBound(lines2) + 1 & "行" '-> 3行 End Sub
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 改行コードが含まれているか検索・判定する(InStr) InStrで改行の有無を判定して処理を分岐するコード

「セルの値に改行が含まれているかどうか」を事前に確認してから処理を分岐したい場合は、InStr関数を使います。

InStr(セル値, vbLf) > 0
改行が含まれるか判定
True: 改行あり
Split→1行ずつ処理
False: 改行なし
そのまま処理
結果を出力
セル・変数・MsgBox等
Sub CheckNewlineExists() Dim cell As Range Dim count As Long count = 0 For Each cell In Range("A1:A100") 'InStr > 0 なら改行コードが含まれている If InStr(cell.Value, vbLf) > 0 Or InStr(cell.Value, vbCrLf) > 0 Then count = count + 1 '改行あり: 改行を削除して整形 cell.Value = Replace(Replace(Replace(_ CStr(cell.Value), vbCrLf, " "), vbCr, " "), vbLf, " ") End If Next cell MsgBox count & "個のセルで改行を削除しました。" End Sub

08 Claude CodeでVBA改行コード処理を自動生成する 「改行を削除して・MsgBoxで複数行表示して」を日本語で指示

VBAの改行コードは「vbCrLf・vbLf・vbCr・Chr(10)」など表記が多く、どれを使えばいいか迷いやすいです。Claude Codeに用途を日本語で伝えるだけで、場面に適した改行コードを使った正しいコードを自動生成できます。

✔️「MsgBoxで"処理完了"と"150件処理しました"を2行に分けて表示するVBAを書いて」
✔️「A1セルに"1行目" "2行目" "3行目"を改行区切りで入力するVBAを書いて。折り返し表示もONにして」
✔️「A列の全セルから改行コード(vbCrLf・vbLf・vbCr全種類)を削除するVBAを書いて」
✔️「A1セルの値を改行で分割してB列に1行ずつ書き出すVBAを書いて」
✔️「A列のセルに改行が含まれているか確認して、あれば件数をMsgBoxで表示するVBAを書いて」

Excel・VBAの文字列処理・データ整形をClaude Code×AI鬼管理で自動化

改行コード処理・文字列置換・データクリーニングなど、Excelのデータ整形業務をClaude Codeを活用したVBAマクロで自動化する方法を無料でご相談いただけます。

代表菅澤 代表菅澤
「毎月外部システムから取り込んだデータの改行コードを手作業で削除している」——こうした繰り返し業務こそVBAで1度作れば二度と手作業不要になります。無料相談でご要件をお聞きします。

NEXT STEP

この記事の内容を、あなたのビジネスで
実践してみませんか?

AI活用を自社で回せるようになりたい方へ

AI鬼管理

Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。

よくある質問

Q. VBAのvbCrLfとvbLfはどう使い分けますか?

A. MsgBoxやテキストファイルへの書き出しにはvbCrLf(Windows標準の改行CR+LF)、Excelセル内のAlt+Enterに相当する改行にはvbLf(LF)を使います。セルにvbCrLfを使うと改行文字が2つ入り、表示が崩れることがあります。「MsgBox = vbCrLf、セル内 = vbLf」と覚えてください。

Q. VBAでMsgBoxの文章を複数行に表示するには?

A. 文字列と文字列の間にvbCrLfを挟みます。「MsgBox "1行目" & vbCrLf & "2行目" & vbCrLf & "3行目"」で3行のメッセージが表示されます。長いメッセージは変数に格納してからMsgBoxに渡すと読みやすいコードになります。空白行を入れる場合はvbCrLfを2つ連続で使います。

Q. VBAでセルにAlt+Enterで入れた改行を削除するには?

A. Excelのセル内改行はvbLf(Chr(10))で表現されます。「cell.Value = Replace(CStr(cell.Value), vbLf, "")」でセル内の改行を削除できます。外部データからコピーした場合はvbCrLfやvbCrも混在することがあるため、「Replace(Replace(Replace(str, vbCrLf, ""), vbCr, ""), vbLf, "")」の3段重ねで全種類を削除するのが安全です。

Q. VBAのSplit関数で改行ごとに文字列を分割するには?

A. 「Dim lines() As String: lines = Split(str, vbLf)」でセル内改行で分割できます。テキストファイルやMsgBox由来のデータはvbCrLfが改行なので「lines = Split(str, vbCrLf)」を使います。分割後は「For i = 0 To UBound(lines)」でループして各行を処理します。UBound(lines)+1が行数になります。

Q. VBAでコードが長くなったときに改行する方法は?

A. VBAコードを複数行に分割するには、行末に「半角スペース + _(アンダースコア)」を付けます。「MsgBox "長いメッセージ" & vbCrLf _」のように書き、次の行に続きを書けます。スペースを忘れるとエラーになります。コメント('から始まる部分)の後には行継続文字は使えないので注意してください。

📚 用語解説

Chr関数(VBA):VBAで文字コード(ASCII/Shift-JIS)を文字に変換する関数。「Chr(10)」はLF(ラインフィード・改行)、「Chr(13)」はCR(キャリッジリターン)、「Chr(9)」はタブ文字を返します。「vbLf」は「Chr(10)」の省略形であり、「vbCrLf」は「Chr(13) & Chr(10)」と同じです。定数名(vbLf等)を使う方がコードの可読性が高いため、実務ではChr()より定数を使うことが推奨されます。

改行コードの実践パターン集:よく使う処理をコピーして使う

実務でよく使うVBA改行コードの処理パターンを集めました。

'--- 実践パターン1: セルの複数行テキストをMsgBoxに表示 --- Sub CellTextToMsgBox() Dim cellVal As String cellVal = Cells(1, 1).Value 'A1の複数行テキストを取得 'セル内改行(vbLf)をMsgBox改行(vbCrLf)に変換して表示 Dim msg As String msg = Replace(cellVal, vbLf, vbCrLf) MsgBox msg End Sub '--- 実践パターン2: テキストボックス入力値の改行を処理 --- Sub ProcessTextBoxInput() 'UserFormのTextBoxには通常vbLfで改行が入る Dim input As String input = "サンプル入力" & vbLf & "2行目" '改行で分割して各行を別々に処理 Dim lines() As String lines = Split(input, vbLf) Dim i As Long For i = 0 To UBound(lines) Cells(i + 1, 1).Value = Trim(lines(i)) '空白もTrimで除去 Next i End Sub '--- 実践パターン3: CSVファイル書き出し時に改行コードを統一 --- Sub WriteCSVWithProperNewline() Dim fileNo As Long fileNo = FreeFile Open "C:\output.csv" For Output As #fileNo Dim i As Long For i = 1 To 10 Print #fileNo, Cells(i, 1).Value & "," & Cells(i, 2).Value Next i Close #fileNo End Sub '--- 実践パターン4: 改行コードの種類を自動判定して削除 --- Function NormalizeNewlines(str As String, Optional separator As String = "") As String '全種類の改行を統一して削除または別の文字に変換 Dim s As String s = Replace(str, vbCrLf, separator) 'Windows改行を先に処理 s = Replace(s, vbCr, separator) '旧Mac改行 s = Replace(s, vbLf, separator) 'Unix改行 NormalizeNewlines = s End Function

VBAの改行コードは「vbCrLf(MsgBox用)」と「vbLf(セル内用)」の2つを軸に、用途に合わせて使い分けることが重要です。外部データのクリーニングでは全種類の改行コードに対応したRemoveAllNewlines・NormalizeNewlines関数を一度作っておき、プロジェクト内で再利用するのがベストプラクティスです。Split・InStrと組み合わせることで、改行コードに関するあらゆる処理に対応できます。Claude Codeに「こういう改行処理をしたい」と日本語で伝えれば、適切な改行コードを使った完全なコードを即座に生成できます。

改行コード別の用途・注意点まとめ:迷ったときの判断基準

VBAで改行コードを使うとき「どれを使えばいいか迷う」というのは初心者だけでなく、VBAに慣れた人でも陥りやすい問題です。ここでは用途別に整理した判断基準を示します。

用途 使う定数 Chr()表記 注意点
MsgBoxで改行 vbCrLf Chr(13) & Chr(10) Windowsの標準改行。MsgBoxはこれしか受け付けない
セル内改行(Alt+Enter) vbLf Chr(10) WrapText=Trueを忘れずに設定する
テキストファイル書き出し vbCrLf Chr(13) & Chr(10) メモ帳等で開くときはCrLfが安全
Webシステムからの取得データ vbLf Chr(10) Linux/Mac由来データはLFのみのことが多い
Macからのデータ(旧形式) vbCr Chr(13) 旧Mac OS9以前の形式。現在はほぼ使われない
VBAコードの行継続 _ (半角スペース+アンダースコア) 文字列内では使えない。コードの見た目の整理用

外部システムから取り込んだデータには複数種類の改行コードが混在していることが多く、それが原因でSplit処理が正しく動かないケースが頻発します。そのため実務では「データ取込直後に必ず改行コードを正規化する」というルールを設けることが重要です。NormalizeNewlines関数を汎用ライブラリとして用意しておき、全てのデータ処理の冒頭で呼び出すようにしておけば、改行コード起因のバグをほぼゼロにできます。Claude Codeを使えばこうした汎用ユーティリティ関数も「改行コードを正規化するVBA汎用関数を作って」と指示するだけで即座に生成してくれるため、ゼロから考える必要はありません。

また、VBAの改行コード処理でもう一つよく起きるミスが「vbCrLfで一度ReplaceしてもvbLfが残る」というパターンです。これはReplace(str, vbCrLf, "")を実行しても、その後にReplace(str, vbLf, "")を実行しないとLFだけが残ってしまうためです。改行コードの削除は必ず「vbCrLf → vbCr → vbLf」の順番で処理するか、NormalizeNewlines関数を使って一括処理するのがベストプラクティスです。

Claude Codeで改行コード処理を自動化する:具体的な活用法

VBAの改行コード処理はルールさえ理解すれば難しくありませんが、処理パターンが多く「今回はどのコードを使うべきか」を毎回調べるのは時間の無駄です。Claude Codeを活用すると、日本語で要件を伝えるだけで適切な改行コードを選択した完全なVBAコードを即座に生成できます。

たとえば「Webシステムからコピーしたテキストをエクセルのセルに貼り付けたとき、改行が正しく表示されない。VBAで修正したい」とClaude Codeに伝えると、vbLfを使ったセル内改行の設定コードを自動生成してくれます。「CSVファイルを読み込むとき改行コードの処理で文字化けする」と伝えれば、vbCrLf・vbLf・vbCrの全パターンに対応したNormalizeNewlines関数を生成します。

改行コードの問題はExcelユーザーが日常的に直面する課題です。異なるOS・システム間でデータを受け渡すたびに起きるこの問題を、Claude Codeを使って一度汎用関数として解決しておくと、以後同じ問題が起きることはありません。VBAの改行コード処理をマスターし、Claude Codeと組み合わせることで、データ処理の品質と効率を大幅に向上させることができます。

VBA改行コードを正しく使いこなすことで、Excelでのデータ処理・MsgBox表示・ファイル出力の品質が格段に向上します。vbCrLf(MsgBox用)とvbLf(セル内用)の使い分けを基本とし、外部データのクリーニングにはvbCrLf・vbCr・vbLfの全種類に対応したNormalizeNewlines関数を用意しておくことが重要です。Split関数との組み合わせによる行ごとの処理、InStr関数による改行コード検索、Replace関数による削除・変換など、今回紹介したパターンをベースに応用してください。不明な点はClaude Codeに質問すれば、要件に合った最適なVBAコードをすぐに提案してもらえます。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月18日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。