皆さん、こんにちは。現場で役立つVBAの技術を伝える講師です。今日は、多くの事務職の方が毎日時間を浪費している「セル内の文字編集」について、実務で本当に使えるテクニックを解説します。
なぜ「置換」や「関数」だけでは不十分なのか
実務のデータは、システムから出力されたままの「汚い状態」であることがほとんどです。特に、セル内に混入した「不要な改行コード」や「全角半角の不揃い」に悩まされている方は多いでしょう。
関数だけで対応しようとすると、複数のセルを参照する作業列が必要になり、シートが重くなる原因になります。VBAなら、一瞬でデータをクレンジングできます。
不要な改行と空白を瞬時に消す
まず、現場で最もよく遭遇する「セル内の余計な改行」を消すためのコードを紹介します。
Sub CleanCellData()
Dim rng As Range
For Each rng In Selection
If Not IsEmpty(rng) Then
‘ 改行コード(LF)を空文字に置換
rng.Value = Replace(rng.Value, vbLf, “”)
‘ 前後の余分なスペースを削除
rng.Value = Trim(rng.Value)
End If
Next rng
End Sub
ポイントは、vbLf を直接指定することです。WindowsのExcelでは改行コードがLF(Line Feed)で格納されていることが多いため、これを置換するだけでセル内の見た目が劇的に整います。
段落操作|文字列の「区切り」を制御する
次に、長い文章を特定の文字で「段落分け」したいケースです。例えば、CSVデータのような「|(パイプ)」区切りの文字列を、セル内で改行させて見やすくしたい場合、以下のように記述します。
Sub FormatParagraphs()
Dim rng As Range
For Each rng In Selection
‘ 記号「|」を改行コードに置換して折り返しを有効にする
rng.Value = Replace(rng.Value, “|”, vbLf)
rng.WrapText = True
Next rng
End Sub
ここで重要なのが rng.WrapText = True です。せっかくコードで改行を挿入しても、セルの「折り返して全体を表示」設定がオフになっていれば、見た目は変わりません。VBAで編集を行う際は、必ずプロパティをセットで操作するのがプロの流儀です。
実務を楽にするための「自分専用辞書」を作る
文字列操作を繰り返していると、「このデータには必ずこのゴミが含まれる」というパターンが見えてきます。その際は、置換処理をひとつのサブプロシージャにまとめ、引数で渡せるようにしておくと便利です。
実務においては、コードの綺麗さよりも「データの正確性」と「処理の速さ」が優先されます。今回紹介したコードは非常にシンプルですが、これらを組み合わせて、自分だけの「データ整形ツール」を作成してみてください。
次回は、正規表現(RegExp)を使った、より高度な「特定パターンの抽出」についてお話しします。それでは、今日の業務もVBAでスマートに終わらせましょう。
