Excelで複数のセルに同じ単語が含まれている場合、手作業で「検索と置換」を使って変更するのは時間がかかります。特に複数シートにまたがる場合や、条件付きで置換したいときなどは、作業が煩雑になりがちです。
この記事では、VBAを使ってシート全体を一括で置換する方法をわかりやすく解説します。初心者でも理解できるよう、コード例や実務での応用パターンも紹介します。
目次
- ✅ シート全体を置換するVBAの基本構文と使い方
- ・基本構文:Replaceメソッドを使う
- ・完全一致で置換したい場合
- ✅ シート全体を範囲指定せずに置換できる理由
- ✅ 検索オプションを制御して精度を高める
- ・大文字と小文字を区別する
- ・数式内も対象にしたい場合
- ✅ シート全体ではなく選択範囲のみ置換したい場合
- ✅ 複数シートをまとめて置換する方法
- ✅ 応用:置換内容を動的に変える方法
- ・入力セルから置換内容を取得する例
- ✅ 実務での応用シーンと注意点
- ・応用例1:年度更新処理の自動化
- ・応用例2:部署名や顧客名の変更
- ・応用例3:英語表記の統一
- ・注意点1:数値を置換するときは慎重に
- ・注意点2:バックアップを取る
- ✅ 置換後に変更箇所を確認する方法
- ✅ まとめ:VBAでシート全体の置換を自動化して作業時間を短縮しよう
✅ シート全体を置換するVBAの基本構文と使い方
VBAを使えば、Excelの「検索と置換」ダイアログで行う操作を自動化できます。基本的な構文を理解しておくことで、特定の文字列や数値を一瞬で置き換えることが可能になります。
・基本構文:Replaceメソッドを使う
VBAで置換を行う代表的な方法は、Cells.Replaceメソッドを使うことです。以下のコードは、アクティブシート全体で「旧文字列」を「新文字列」に置き換える最も基本的な例です。
Sub ReplaceAllInSheet()
Cells.Replace What:="旧文字列", Replacement:="新文字列", LookAt:=xlPart
End Sub
この構文では、Whatが検索対象、Replacementが置換後の文字列を意味します。
LookAt:=xlPartは「部分一致」で検索する設定です。完全一致にしたい場合はxlWholeを指定します。
・完全一致で置換したい場合
部分一致では「顧客」という文字が「顧客名」や「顧客番号」にもヒットしてしまいます。完全一致にしたいときは、次のように指定します。
Sub ReplaceWholeWord()
Cells.Replace What:="顧客", Replacement:="取引先", LookAt:=xlWhole
End Sub
このように指定すれば、「顧客名」や「顧客番号」はそのままで、「顧客」という単独セルだけが置き換えられます。
✅ シート全体を範囲指定せずに置換できる理由
VBAのCells.Replaceを使うと、特定のセル範囲を指定しなくても、シート全体が自動的に対象になります。
Cellsは「シート上のすべてのセル」を意味するため、下記のように単純に記述しても全体が対象になります。
Sub ReplaceAllWithoutRange()
Cells.Replace What:="2023", Replacement:="2024", LookAt:=xlPart
End Sub
このコードを実行すると、シート全体の文字列や数値の中から「2023」を探し出し、すべて「2024」に変更します。
特に年度更新や日付修正などの定期業務に非常に便利です。
✅ 検索オプションを制御して精度を高める
Excelの検索と置換では、「大文字と小文字の区別」「数式内も検索」などの設定があります。VBAでも同じように、これらを指定して動作をコントロールできます。
・大文字と小文字を区別する
Sub ReplaceCaseSensitive()
Cells.Replace What:="ABC", Replacement:="XYZ", MatchCase:=True
End Sub
MatchCase:=Trueを指定すると、「ABC」と「abc」は区別されます。
逆に、MatchCase:=False(既定値)なら、どちらも同じものとして扱われます。
・数式内も対象にしたい場合
数式の中に含まれる文字列を置き換えたい場合は、SearchOrderなどのパラメータを調整する必要があります。
Sub ReplaceInFormula()
Cells.Replace What:="Sheet1", Replacement:="Sheet2", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub
このコードでは、数式内に含まれるシート名や参照文字列まで置き換えられます。
特に、複数シートをコピーした後に参照先を変更したい場合に有効です。
参考:【Excel】文字を置き換える関数まとめ|SUBSTITUTE・REPLACE・応用例と注意点
✅ シート全体ではなく選択範囲のみ置換したい場合
場合によっては、シート全体ではなく「選択範囲内だけ」で置換したいこともあります。
その場合は、Selection.Replaceを使います。
Sub ReplaceInSelection()
Selection.Replace What:="東京都", Replacement:="Tokyo", LookAt:=xlPart
End Sub
このコードを実行する前に、置換対象の範囲を選択しておけば、その部分だけが変更されます。
特定の列や行だけを対象にしたい場合にも便利です。
✅ 複数シートをまとめて置換する方法
1枚ずつ置換するのは手間がかかるため、すべてのシートをループ処理でまとめて置換することも可能です。
Sub ReplaceAllSheets()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Cells.Replace What:="未処理", Replacement:="完了", LookAt:=xlWhole
Next ws
End Sub
このマクロでは、ブック内のすべてのシートを対象に「未処理」を「完了」に置き換えます。
報告書やチェックリストなど、複数のシートに同じ項目が存在する場合に効果的です。
参考:【VBA】Replaceメソッドでワイルドカードを使う方法|正規表現で柔軟な一括置換を実現
✅ 応用:置換内容を動的に変える方法
業務では、日付や担当者名などを変数化して置換したい場面があります。
その場合、セルの値や入力フォームから置換対象を取得することで、柔軟に対応できます。
・入力セルから置換内容を取得する例
Sub ReplaceDynamic()
Dim beforeText As String
Dim afterText As String
beforeText = Range("B1").Value
afterText = Range("B2").Value
Cells.Replace What:=beforeText, Replacement:=afterText, LookAt:=xlPart
End Sub
この例では、B1セルに検索文字、B2セルに置換後の文字を入力して実行します。
毎回マクロを編集しなくても、置換内容を動的に変更できるのが特徴です。
✅ 実務での応用シーンと注意点
・応用例1:年度更新処理の自動化
年度ごとに「2024年度 → 2025年度」と書き換える作業を自動化できます。
複数シートを対象にしておけば、報告書や集計表をまとめて更新可能です。
・応用例2:部署名や顧客名の変更
取引先が合併・社名変更した場合など、ブック全体を自動で置換することでミスを防ぎます。
・応用例3:英語表記の統一
「Dept」や「Dep.」など、ばらついた略語を統一表記にする際にも役立ちます。
・注意点1:数値を置換するときは慎重に
たとえば「1」を「10」に置き換えると、意図しない部分(たとえば「12」→「102」など)まで変更される場合があります。
この場合はxlWholeで完全一致にするか、正規表現を活用するのが安全です。
・注意点2:バックアップを取る
置換は「元に戻す」操作が難しいため、特にシート全体を対象にする前にはブックのコピーを作成しておきましょう。
✅ 置換後に変更箇所を確認する方法
置換が正しく行われたかを確認したい場合は、Findメソッドを組み合わせて「残っていないかチェック」する方法もあります。
Sub CheckRemaining()
Dim c As Range
Set c = Cells.Find(What:="旧文字列", LookAt:=xlPart)
If c Is Nothing Then
MsgBox "すべて置換されました。"
Else
MsgBox "まだ一部に旧文字列が残っています。"
End If
End Sub
これにより、完全な置換ができたかどうかを自動で確認できます。
✅ まとめ:VBAでシート全体の置換を自動化して作業時間を短縮しよう
Cells.Replaceを使えば、シート全体を一括で置換可能LookAt:=xlPartで部分一致、xlWholeで完全一致を制御- 入力セルを利用すれば、動的な置換処理にも対応
- 複数シートをループ処理すればブック全体の変更も一度で完了
- 数値や日付を扱う場合は慎重にテストし、バックアップを取るのが安全
VBAで置換を自動化すれば、毎回手作業で操作する必要がなくなり、ヒューマンエラーの防止にもつながります。特に定期的な報告書やマスタデータの更新など、繰り返し発生する業務で活用すると、作業時間を大幅に削減できるでしょう。