主な内容の要点
1. 改行に使える文字コード・定数
- Chr(10) : ラインフィード (LF)
- Chr(13) : キャリッジリターン (CR)
- Chr(13) & Chr(10) : CR+LF
- これらを直接書く代わりに、以下の定数を利用できる
vbCrLf: CR+LFvbCr: CRvbLf: LFvbNewLine: 実行環境に応じて適切な改行コードに置換される(WindowsならCR+LF、MacならCR)
2. セル内で改行する場合
- Excelシート上では Alt + Enter でセル内改行が可能。
- VBAでセルに改行を含む文字列を代入するには、例えば次のように書く:
Sub Test()
Range("B2").Value = "東京都" & vbLf & "中央区"
End Sub
VB- 実際にセル内改行は Chr(10) または vbLf が使われている。
3. ダイアログボックス(MsgBox)で改行する場合
vbNewLineを使うのが推奨。環境依存を吸収してくれる。
Sub Test()
MsgBox "こんにちは" & vbNewLine & "お元気ですか?"
End Sub
VB4. ポイント整理
- セル内改行 → Chr(10) または vbLf
- MsgBoxなど環境依存する場面 → vbNewLine
- Windows固定なら vbCrLf でもOK
つまり、セルに書き込むときは vbLf、メッセージ表示など環境に依存する場面では vbNewLine を使うのがベスト、というのが結論です。
Excel VBAで「改行」をやさしく理解する
今回は「改行」を完全に腑に落ちるまで、実例で丁寧に説明します。ポイントは「どこで使う改行か」によって正しい書き方が変わることです。
改行ってそもそもなに?
- 改行は「次の行に移る記号」。文を縦に並べるための見えないマークです。
- コンピュータには主に以下の種類があります。
- LF(Chr(10)): 次の行へ移る
- CR(Chr(13)): 行の先頭に戻る
- CR+LF: 先頭に戻ってから次の行へ(Windowsの標準)
- VBAでは、文字コードを直接書く代わりに“読みやすい定数”が用意されています。
- vbLf: LF
- vbCr: CR
- vbCrLf: CR+LF
- vbNewLine: 実行環境に合わせて自動で適切な改行にしてくれる
補足:Excelの「セル内改行」はLF(vbLf)で動く、という仕様が肝です。
セルに「改行入りの文字」を入れる
まずは手で試す
- 手動のセル内改行: セル編集中に Alt + Enter
VBAで同じことをやる
- 基本形: 文字と文字の間に改行を挟むだけ
Sub WriteWithLineBreaksToCell()
Range("B2").Value = "東京都" & vbLf & "中央区"
End Sub
VB- ポイント
- セル内改行は vbLf(LF)が効く。 vbCrLfだとセル内ではうまく改行されないことがある。
- 目で見て確認したいときは「表示形式」を標準にしておくとわかりやすい。
例題 1:住所を縦に並べる
Sub AddressToCell()
Dim pref As String, city As String, street As String
pref = "東京都"
city = "中央区"
street = "銀座一丁目 1-1"
Range("B3").Value = pref & vbLf & city & vbLf & street
End Sub
VB- 狙い: セル B3 に3行で表示(都道府県/市区/丁目)
- つまづきやすい: vbCrLfを使うとセルでは改行されないことがある。迷ったらセルはvbLf。
メッセージボックス(MsgBox)で改行する
まずは素直に
Sub ShowGreeting()
MsgBox "こんにちは" & vbNewLine & "お元気ですか?"
End Sub
VB- ポイント
- vbNewLineは環境に合わせて改行コードを選んでくれるので、MsgBoxにはこれが安全。
- Windows限定ならvbCrLfでもほぼ同じ結果。
例題 2:入力チェックのメッセージ
Sub ShowValidationMessage()
Dim msg As String
msg = "入力エラーがあります。" & vbNewLine & _
"- 名前を入力してください" & vbNewLine & _
"- 年齢は数値で入力してください"
MsgBox msg, vbExclamation, "確認"
End Sub
VB- 狙い: 読みやすい箇条書きにする
- コツ: 文字列を一度変数にまとめてからMsgBoxに渡すと管理しやすい
文字列の連結と改行の定番パターン
- ラベル: 画面にきれいに見せるなら「ラベル: 値」の形に
Sub FormatLabelValue()
Dim report As String
report = "顧客名: 佐藤様" & vbNewLine & _
"注文番号: 2025-1001" & vbNewLine & _
"合計: 12,800円"
MsgBox report, vbInformation, "注文情報"
End Sub
VB- セルの複数行: 見出し+内容
Sub MultiLineCell()
Range("C5").Value = "商品名: コーヒー豆" & vbLf & _
"産地: エチオピア" & vbLf & _
"焙煎: 中深煎り"
End Sub
VBありがちな失敗と回避法
- セルで改行されない
- 原因: vbCrLfやvbCrを使っている
- 解決: セル内はvbLf(Chr(10))を使う
- MsgBoxで改行されない
- 原因: 環境差でLF単体が効かないことがある
- 解決: vbNewLineまたはvbCrLfを使う
- 見えない改行が混ざってる
- 原因: コピペした文章に別の改行コードが入っている
- 解決: 置換で正規化する
Sub NormalizeLineBreaksInCell()
With Range("D2")
.Value = Replace(Replace(.Value, vbCrLf, vbLf), vbCr, vbLf)
End With
End Sub
VB- 説明: まずCR+LFをLFへ、次にCRもLFへ統一して、セルで確実に改行が効く形にする
どれを使えばいい?最短の指針
- セル内改行: vbLf
- MsgBox/テキストファイルなど環境差が出やすい場面: vbNewLine(またはWindows限定ならvbCrLf)
- 文字コードを意識しないで済ませたい: まずは「セル=vbLf」「画面表示=vbNewLine」と覚える
ちょっと背伸び:関数化して毎回迷わない
Function JoinLinesForCell(ParamArray parts() As Variant) As String
Dim i As Long, result As String
For i = LBound(parts) To UBound(parts)
If i > LBound(parts) Then result = result & vbLf
result = result & CStr(parts(i))
Next i
JoinLinesForCell = result
End Function
Sub UseJoinLines()
Range("E2").Value = JoinLinesForCell("第一行", "第二行", "第三行")
End Sub
VB- 効果: 配列的に渡した文字を自動で「セル用改行(vbLf)」でつないでくれる
- 応用: MsgBox用にvbNewLineで連結する関数も作れば、使い分けが一発で安定します
練習問題
- 問題 1: セルA1に「氏名」「部署」「内線」を3行で表示するコードを書いて
- 問題 2: 入力が空のとき、MsgBoxで「未入力項目があります」「氏名」「メールアドレス」を改行で表示する
- 問題 3: セルB5~B7にある3つの文字列を1セル(C5)に改行結合して表示する
やってみてつまずいたところ、遠慮なく教えて。あなたが何で悩むのかが、次の一歩に一番効きます。

