VBAのReplace関数でセル内の改行を削除

VBAのReplace関数セル内の改行を削除

セル内の改行を削除する Excel2013 マクロ講座 70回

セル内の改行を全部削除するマクロ

セル内の改行を削除したい時には、VBAではReplace関数を使って改行コードと""(無)を置換することができます。
Clean関数でも同様の操作ができます。

(サンプルファイルは、こちらから マクロ70回サンプルデータ

Replace関数を使って改行削除

Replace関数は、引数findで指定された文字列を、引数replaceで指定された回数分で置換します。
セル内の改行を削除するマクロ1
図のようにアクティブセルにある改行コードを削除したいときは、
セル内の改行を削除するマクロ2
Replace関数の構文に当てはめると、
セル内の改行を削除するマクロ3
変数に使う文字列をmyStrという名前で宣言すると、コードは、次のようになります。
Sub セルの改行削除()
    Dim myStr As String
    myStr = Replace(ActiveCell, vbLf, "")
    ActiveCell.Value = myStr
End Sub
コードを実行すると改行が削除されます。
セル内の改行を削除するマクロ4
Clean関数を使う場合のコードでは次のようになります。Clean関数の引数は対象文字列だけです。
Sub セルの改行をCleand削除()
    Dim myStr As String
    myStr = ActiveCell.Value
    ActiveCell.Value = WorksheetFunction.Clean(myStr)
End Sub
    

選択範囲のセルにある改行を削除するマクロ

どちらもアクティブセルに対して実行するためのコードです。
これを任意の選択範囲に対して改行を削除できるようにするには、 おなじみのFor Each~Nextステートメントで、ひとつずつセルを処理します。個々のセルはRange型の変数としてセルという名前で宣言しています。
Sub セル内の改行を削除する()
    Dim セル As Range
    Dim myStr As String
    For Each セル In Selection
      myStr = セル.Value
      セル.Value = Replace(myStr, vbLf, "")
    Next セル
End Sub
Clean関数を使って、任意の選択範囲に対して改行を削除できるようにするコードは、同様にFor Each~Nextステートメントで、ひとつずつセルを処理します。
Sub セル内の改行をClean削除する()
    Dim セル As Range
    Dim myStr As String
    For Each セル In Selection
      myStr = セル.Value
      セル.Value = WorksheetFunction.Clean(myStr)
    Next セル
End Sub

結果は、どちらを使っても選択範囲の改行を削除することができます。
セル内の改行を削除するマクロ5

セル内改行を削除した文字列を隣の列に表示

セル内改行のある文字列は、それはそのままにしておいて、隣の列に改行を削除した文字列を抽出したい場合もあるかと思います。 そのような時は、Offset プロパティを使ってアクティブセルの隣の列を操作するようにします。
Sub セル内改行を削除した文字列を隣に表示()
    Dim セル As Range
    Dim myStr As String
    For Each セル In Selection
      myStr = セル.Value
      セル.Offset(0, 1).Value = WorksheetFunction.Clean(myStr)
    Next セル
End Sub
マクロを実行すると、選択したA列の範囲にある文字列から改行コードを削除した文字列が隣のB列に表示されます。
セル内の改行を削除するマクロ6