【VBAリファレンス|実務向け】実務で差がつく!Excelの「セル内改行」を一瞬でクリーンにするVBAテクニック

スポンサーリンク

皆さんこんにちは。現場で多くのデータと格闘していると、外部システムからのCSV出力や、Webサイトからのコピー&ペーストで「セル内の改行」に悩まされることはありませんか?見た目には気づきにくいけれど、いざVLOOKUP関数や集計を行おうとすると、なぜかエラーになる。そんな経験がある方も多いはずです。

今回は、手作業で置換を繰り返す手間を省き、ワンクリックで全シートを浄化する「実務特化型VBA」をご紹介します。

なぜ「置換」では不十分なのか?

Excelの標準機能である「Ctrl + H」による置換でも改行の削除は可能です。しかし、実務では以下のようなケースが発生します。
・複数のシートやブックにまたがってデータが存在する
・特定の列だけを対象にしたいが、列が可変である
・改行だけでなく、タブや不要なスペースも同時に消したい

こうしたニーズに応えるには、やはりVBAによる自動化が最も効率的でミスがありません。

セル内改行を削除する基本コード

まずは、選択範囲内の改行を削除するシンプルなコードを見ていきましょう。ここで重要なのは、改行コードには「LF(Chr(10))」と「CR(Chr(13))」の2種類が存在する可能性があるという点です。

サンプルコード

Sub CleanCellLineBreaks()
Dim rng As Range
‘ 選択範囲内のセルをループ処理
For Each rng In Selection
If Not rng.HasFormula Then
‘ LFとCRをそれぞれ置換して削除する
rng.Value = Replace(Replace(rng.Value, Chr(10), “”), Chr(13), “”)
End If
Next rng
MsgBox “改行の削除が完了しました。”
End Sub

実務でさらに一歩進めるためのヒント

上記のコードを現場で使う際、さらに実用性を高めるための「プロの視点」を2つお伝えします。

1. 計算式を残す配慮
コード内に「If Not rng.HasFormula Then」と入れている点に注目してください。もしセルにVLOOKUPなどの数式が入っている場合、値を強制的に上書きすると数式が壊れてしまいます。実務では「値だけをクリーンにしたいのか」「数式の結果を値として確定させたいのか」を明確に分ける必要があります。

2. トリム(余白)の同時処理
改行を消すと、前後に不要なスペースが残ることがよくあります。VBAの「Trim関数」を併用して、「rng.Value = Trim(Replace(…))」とすることで、前後の空白も同時に除去できます。これにより、データの整合性が劇的に向上します。

まとめ

セル内改行の削除は、データクレンジングの第一歩です。この処理を自動化しておくだけで、その後の集計や分析にかかるストレスが大きく軽減されます。ぜひ、皆さんの「個人用マクロブック」に登録し、日々の業務で活用してみてください。

次回の更新では、このコードを応用して「特定の区切り文字でデータを分割する」テクニックを解説する予定です。お楽しみに!

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