Excel VBA | VBAで改行する方法

Excel VBA VBA
スポンサーリンク

主な内容の要点

1. 改行に使える文字コード・定数

  • Chr(10) : ラインフィード (LF)
  • Chr(13) : キャリッジリターン (CR)
  • Chr(13) & Chr(10) : CR+LF
  • これらを直接書く代わりに、以下の定数を利用できる
    • vbCrLf : CR+LF
    • vbCr : CR
    • vbLf : LF
    • vbNewLine : 実行環境に応じて適切な改行コードに置換される(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
VB

4. ポイント整理

  • セル内改行 → 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)に改行結合して表示する

やってみてつまずいたところ、遠慮なく教えて。あなたが何で悩むのかが、次の一歩に一番効きます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました