【VBAリファレンス|実務向け】【Excel VBA】セル内の「改行」を一瞬で削除する!Replaceメソッド活用術

スポンサーリンク

導入:なぜセル内改行の削除が必要なのか

実務で外部システムから出力されたCSVや、他人が作成したExcelデータを取り扱う際、セルの中に予期せぬ「改行」が含まれていることはありませんか?
このセル内改行は、VLOOKUP関数での検索ミスや、データ集計時のレイアウト崩れを引き起こす大きな原因となります。手作業で一つひとつ削除するのは非効率ですし、数千行あるデータでは現実的ではありません。
今回は、VBAを使ってセル内改行を一括で、かつ高速に削除する方法を解説します。

基礎知識:セル内改行の正体とは

Excelのセル内で「Alt」+「Enter」キーを押すと改行されますが、VBAの世界ではこの改行は「vbLf」という定数で表現されます。これは文字コードで言う「Chr(10)」のことです。
VBAでこの改行を削除するには、Replaceメソッドを使用します。これはExcelの「置換(Ctrl+H)」機能をコード化したもので、特定の文字列を別の文字列に置き換えることができます。

実装:Replaceメソッドの基本構文

Replaceメソッドは、対象となる範囲(Rangeオブジェクト)に対して以下のように記述します。

Rangeオブジェクト.Replace What:=検索したい文字, Replacement:=置換後の文字, LookAt:=xlPart

ここで重要なのは、引数「What」に「vbLf」を指定し、「Replacement」を空文字(””)にすることです。これにより、改行コードだけが取り除かれます。

サンプルプログラム:選択範囲の改行を一括削除

以下のコードは、ユーザーがマウスで選択した範囲内にあるすべてのセル内改行を削除する実用的なマクロです。

Sub RemoveLineBreaks()
‘ 対象範囲を格納する変数
Dim rngTarget As Range

‘ ユーザーに範囲を選択させる
On Error Resume Next
Set rngTarget = Application.InputBox(“改行を削除したい範囲を選択してください”, Type:=8)
On Error GoTo 0

‘ キャンセルされた場合は終了
If rngTarget Is Nothing Then Exit Sub

‘ 選択範囲に対して置換を実行
‘ vbLf(改行)を空文字に置き換える
‘ xlPartを指定することで、セル内の一部に含まれる改行も対象にする
rngTarget.Replace What:=vbLf, Replacement:=””, LookAt:=xlPart

MsgBox “改行の削除が完了しました!”, vbInformation
End Sub

応用・注意点:現場でハマらないために

1. 全シート・全範囲への適用
特定の範囲ではなく、現在開いているシートのデータすべてを対象にしたい場合は、rngTargetを「ActiveSheet.UsedRange」に書き換えるだけで対応可能です。
2. 改行コードの種類に注意
macOS環境や、特定のWebシステム経由のデータでは、改行コードが「vbCr(Chr(13))」である場合があります。もしvbLfで削除できない場合は、vbCrも同様にReplaceしてみてください。
3. 取り消し不可
VBAで実行した置換操作は、「元に戻す(Ctrl+Z)」が効きません。大切なデータの場合は、必ず事前にブックのコピーをとるか、バックアップを作成してから実行するようにしましょう。

このテクニックを身につければ、データクリーニングの時間が劇的に短縮されます。ぜひ明日からの業務にお役立てください!

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