VBAで自動化 VBA一覧 セル・値の取得と貼り付け 置き換え

【VBA】列ごとに文字列を置換する方法|列別ルールで安全に一括処理

Excelで業務データを扱っていると、
「A列はこの文字を置換したいけど、B列は別のルールにしたい」
「列ごとに意味が違うので、同じ置換は使えない」
「全部まとめて置換すると、データを壊しそうで怖い」
と感じたことはないでしょうか。

たとえば、次のようなケースは非常によくあります。

  • A列:会社名(㈱ → 株式会社)
  • B列:商品コード(記号を削除)
  • C列:コメント(特定のNGワードのみ削除)

このように、列ごとに役割が違うデータ に対して
単純な一括置換を行うと、
意図しない列まで書き換えてしまう危険があります。

そこで必要になるのが、
「列ごとに置換ルールを分けて処理するVBA」 です。

この記事では、VBA初心者の方でも理解できるように、

  • 列ごと置換が必要になる理由
  • 基本的な考え方
  • 実務で使える具体的なVBAコード
  • よくある失敗と安全に使うコツ

を、コード付きで丁寧に解説します。

✅ VBAで「列ごとに置換する」とはどういうことか

※誤解されやすいポイント

「対象範囲を分けるだけ」と思うと、実務ではうまくいきません。

・列ごと置換の意味

VBAでの「列ごと置換」とは、
列ごとに異なる置換ルールを適用する処理 のことです。

ポイントは、

  • 同じシート内でも
  • 列によって
  • 置換内容を変える

という点にあります。


・なぜ列ごとに分ける必要があるのか

列ごとに意味が違うデータを、
同じルールで置換すると次のような事故が起きます。

  • 商品コードの「-」を削除したら、日付まで壊れた
  • コメント用のNGワード削除が、会社名にも影響した
  • 数値列を文字列として扱ってしまった

こうした事故を防ぐために、
列単位で処理を分ける設計 が重要になります。


✅ 列ごと置換の基本的な考え方

※ここを読まないと後で混乱します

コードを書く前に、考え方を整理しましょう。

・基本ルール

列ごと置換の基本は、次の3点です。

  1. どの列を対象にするか明確にする
  2. 列ごとに置換ルールを決める
  3. それぞれを独立して処理する

「全部まとめて1つのループで処理しよう」とすると、
逆に読みにくく、壊れやすいコードになります。


✅ 【基本】特定の列だけを置換するVBA

※初心者が最初に覚える形

まずは「1列だけ」を安全に置換する方法です。

・A列だけを対象に置換する例

Sub Replace_Column_A()

    Dim targetRange As Range
    Set targetRange = Range("A2:A100")

    Dim cell As Range

    For Each cell In targetRange
        If cell.Value <> "" Then
            cell.Value = Replace(cell.Value, "㈱", "株式会社")
        End If
    Next cell

End Sub

・このコードのポイント

  • 対象をA列に限定している
  • 空白セルは処理しない
  • Replace関数で文字列を置換

初心者の方は、
まず「列を限定する」という考え方 に慣れることが大切です。


✅ 複数の列を「列ごとに違うルール」で置換する方法

※ここが本題

実務ではこのパターンが一番多いです。

・例:列ごとに役割が違うケース

  • A列:会社名(㈱ → 株式会社)
  • B列:商品コード(ハイフン削除)
  • C列:コメント(特定文字削除)

これをVBAで安全に処理します。


・列ごとに処理を分けた実務コード

Sub Replace_By_Column()

    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row

    Dim r As Long

    For r = 2 To lastRow

        ' A列:会社名
        If Cells(r, "A").Value <> "" Then
            Cells(r, "A").Value = Replace(Cells(r, "A").Value, "㈱", "株式会社")
        End If

        ' B列:商品コード
        If Cells(r, "B").Value <> "" Then
            Cells(r, "B").Value = Replace(Cells(r, "B").Value, "-", "")
        End If

        ' C列:コメント
        If Cells(r, "C").Value <> "" Then
            Cells(r, "C").Value = Replace(Cells(r, "C").Value, "※", "")
        End If

    Next r

End Sub

・この書き方のメリット

  • 列ごとの処理内容が一目で分かる
  • 修正・追加が簡単
  • 初心者でも読みやすい

「スマートさ」より
「分かりやすさ重視」 の方が、実務では正解です。




✅ 列ごとに「複数ルール」で置換する方法

※実務で一段レベルアップ

1列に対して複数の置換を行うケースです。

・A列に複数の表記ゆれがある場合

Sub Replace_By_Column_Multiple()

    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row

    Dim beforeWords As Variant
    Dim afterWords As Variant

    beforeWords = Array("㈱", "(株)")
    afterWords = Array("株式会社", "株式会社")

    Dim r As Long, i As Long

    For r = 2 To lastRow
        For i = LBound(beforeWords) To UBound(beforeWords)
            Cells(r, "A").Value = Replace(Cells(r, "A").Value, beforeWords(i), afterWords(i))
        Next i
    Next r

End Sub

・ポイント


✅ 列ごと置換を高速に処理する方法(大量データ向け)

※ここを読まないと処理が遅くなります

件数が多い場合は、配列処理が有効です。

・考え方

  1. 列の値を配列で取得
  2. VBA内で置換
  3. 一括で書き戻す

・A列を高速に置換する例

Sub Replace_By_Column_Fast()

    Dim lastRow As Long
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row

    Dim data As Variant
    data = Range("A2:A" & lastRow).Value

    Dim r As Long

    For r = LBound(data, 1) To UBound(data, 1)
        data(r, 1) = Replace(data(r, 1), "㈱", "株式会社")
    Next r

    Range("A2:A" & lastRow).Value = data

End Sub

・なぜ速くなるのか

  • Excelとのやり取り回数が少ない
  • VBA内だけで処理が完結

👉
件数が多いほど効果が大きい 方法です。

参考:【VBA】配列(Array)の基礎を徹底解説|1次元配列・2次元配列の仕組みと実務での使い方


✅ 条件付きで列ごとに置換する方法

※事故防止のために重要

すべての行を対象にしないケースです。

・特定条件を満たす場合のみ置換

If Cells(r, "D").Value = "対象" Then
    Cells(r, "A").Value = Replace(Cells(r, "A").Value, "㈱", "株式会社")
End If

条件を付けることで、

  • 意図しないデータ変更
  • 誤置換

を防げます。


✅ 列ごと置換でよくある失敗

※ここを読まないと後悔しやすい

  • 列の意味を整理せずに実装
  • 対象範囲を広く取りすぎる
  • 数値列を文字列として置換
  • バックアップを取らずに実行

特に列ごと処理は、
ロジックが複雑になりやすい ため注意が必要です。


✅ 実務で安全に使うためのチェックポイント

※初心者でも必ず守ってほしい

  • 列の役割をコメントで明記する
  • 最初は少ない行でテスト
  • 元データをコピーしてから実行
  • 置換内容を仕様として残す

これだけで、
列ごと置換の事故は大幅に減ります。

参考:【VBA】シートコピーを自動化する方法|Add・Copyメソッドの違いと使い方を徹底解説


✅ 列ごと置換を関数化する考え方

※再利用したい場合

Function ReplaceCompanyName(textValue As String) As String
    ReplaceCompanyName = Replace(textValue, "㈱", "株式会社")
End Function

列ごとに関数を分けることで、

  • 可読性アップ
  • 修正が楽
  • テストしやすい

といったメリットがあります。


✅ まとめ:VBAで列ごとに置換する実務ポイント

  • 列ごとに意味が違うデータは処理を分ける
  • 対象列を明確に限定する
  • 列ごとにルールを分けると安全
  • 大量データは配列処理で高速化
  • 必ずテストしてから本番実行

VBAによる「列ごと置換」は、
一括処理の事故を防ぎながら業務効率を上げるための必須スキル です。

まずはシンプルな列から始めて、
少しずつルールを追加していきましょう。

    -VBAで自動化, VBA一覧, セル・値の取得と貼り付け, 置き換え