〖ExcelVBA〗セル内の改行(Alt+Enter)を一括で削除・置換するマクロ

ExcelVBA

Excelを使っていて、
セルの中で勝手に改行されてしまって困った経験はありませんか?

特に次のような場面でよく発生します。

  • CSVやテキストデータを貼り付けたとき
  • アンケートや問い合わせ内容を一覧にしたとき
  • 他システムから出力されたデータを加工するとき

見た目は1セルでも、
中に「改行(Alt+Enter)」が入っていると、並び替えや集計がうまくいかないことがあります。

そこで今回は、ExcelVBAでセル内の改行を一括で削除・置換するマクロをご紹介します。


スポンサーリンク
スポンサーリンク

この記事でできること

  • セル内の改行を一括で削除
  • 改行をスペースに置換
  • 選択範囲だけ処理
  • シート全体をまとめて処理

そもそも「セル内の改行」とは?

Excelでは、セル内で Alt + Enter を押すと、
セルの中で改行できます。

VBAでは、この改行は次の文字として扱われます。

vbLf   (ラインフィード)
Chr(10)

今回のマクロでは、この Chr(10) を削除・置換します。


① 選択範囲のセル内改行を一括削除するマクロ(基本)

まずは一番安全な、選択範囲だけを対象にする方法です。

Option Explicit

' 選択範囲のセル内改行を削除する
Sub RemoveLineBreak_Selection()

    Dim rng As Range
    Dim cell As Range

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してから実行してください。", vbExclamation
        Exit Sub
    End If

    Set rng = Selection

    For Each cell In rng.Cells
        If Not IsError(cell.Value) Then
            cell.Value = Replace(cell.Value, Chr(10), "")
        End If
    Next cell

    MsgBox "選択範囲の改行を削除しました。", vbInformation

End Sub

ポイント

  • Chr(10) がセル内改行
  • Replace で空文字に置き換えて削除
  • エラーセルはスキップして安全に処理

② 改行を「スペース」に置換するマクロ

改行を削除すると、文字が詰まりすぎる場合があります。
その場合は、スペースに置換するのがおすすめです。

Option Explicit

' 選択範囲のセル内改行をスペースに置換
Sub ReplaceLineBreakWithSpace()

    Dim rng As Range
    Dim cell As Range

    If TypeName(Selection) <> "Range" Then
        MsgBox "セル範囲を選択してから実行してください。", vbExclamation
        Exit Sub
    End If

    Set rng = Selection

    For Each cell In rng.Cells
        If Not IsError(cell.Value) Then
            cell.Value = Replace(cell.Value, Chr(10), " ")
        End If
    Next cell

    MsgBox "改行をスペースに置換しました。", vbInformation

End Sub

③ シート全体のセル内改行を一括処理するマクロ

「このシートは全部きれいにしたい」という場合は、 UsedRange(使っている範囲)を対象にします。

Option Explicit

' アクティブシート全体のセル内改行を削除
Sub RemoveLineBreak_Sheet()

    Dim ws As Worksheet
    Dim cell As Range

    Set ws = ActiveSheet

    For Each cell In ws.UsedRange.Cells
        If Not IsError(cell.Value) Then
            cell.Value = Replace(cell.Value, Chr(10), "")
        End If
    Next cell

    MsgBox "シート全体の改行を削除しました。", vbInformation

End Sub

よくある質問

Q. 複数行の改行も消えますか?

はい。
セル内に何個改行があっても、すべて置換されます。

Q. 数式が入っているセルはどうなりますか?

数式セルの場合、
結果の文字列が置換され、数式は値に変わります

数式を残したい場合は、
処理前に対象範囲を限定してください。

Q. 手作業でやる方法はありますか?

「検索と置換」で、
検索文字に Ctrl + J を入力すると改行を指定できますが、 大量データではVBAのほうが安全・確実です。


実行手順

  1. Alt + F11 でVBEを開く
  2. 「挿入」→「標準モジュール」
  3. 上記マクロを貼り付け
  4. セル範囲を選択(またはシートを表示)
  5. マクロを実行

まとめ:セル内改行はVBAで一発処理

セル内の改行は、
見た目では気づきにくいですが、Excel作業のトラブル原因になりやすいポイントです。

  • 並び替えがうまくいかない
  • CSV出力時にレイアウトが崩れる
  • 他システムに取り込めない

今回のVBAを使えば、
こうした問題をまとめて安全に解消できます。

ぜひ、日々のExcel業務に取り入れてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました