Categories: excel

VBAで文字列を置換する方法を徹底解説!Replace関数の使い方と応用テクニック

Excel VBAを使って作業を自動化したいと考えている方にとって、「文字列の置換」はよく使う基本操作のひとつです。
たとえば、Excelシートの中で特定の語句を一括で書き換えたり、ファイル名やデータを一括修正したりする場面で非常に役立ちます。

本記事では、VBAの基本的な文字列置換方法から、複数条件での置換、セル範囲への応用まで、実務で使えるテクニックを含めて丁寧に解説します。
初心者でも理解できるように、具体的なコード例とともにご紹介していきます。


VBAで文字列を置換する基本:Replace関数とは?

VBAにおける文字列の置換は、主に Replace 関数を使って行います。
この関数は、文字列の中から指定した文字列を探し、別の文字列に置き換えてくれる便利な関数です。

基本構文

Replace(expression, find, replace[, start[, count[, compare]]])

各引数の意味

  • expression: 元の文字列
  • find: 探す文字列
  • replace: 置き換える文字列
  • start: 探し始める位置(省略可)
  • count: 置換する回数(省略可)
  • compare: 比較方法(vbBinaryCompare または vbTextCompare)

例:単純な置換

Sub SampleReplace()
Dim result As String
result = Replace("今日は晴れです", "晴れ", "雨")
MsgBox result ' 出力:今日は雨です
End Sub

セルの値を置換するVBAコード例

次は、Excelシート上のセルの中にある文字列を置換する基本的なコードです。

Sub ReplaceCellText()
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")

Dim originalText As String
Dim newText As String

originalText = ws.Range("A1").Value
newText = Replace(originalText, "株式会社", "(株)")

ws.Range("A1").Value = newText
End Sub

このコードでは、シート「Sheet1」のセルA1の中にある「株式会社」という文字列を「(株)」に置き換えています。


複数セルを対象に一括で置換する方法

Excelでは、1つのセルだけでなく、複数セルの中身をまとめて置き換えたい場合もあります。
以下は、A列(A1〜A100)のすべてのセルで「旧社名」を「新社名」に置き換える例です。

Sub ReplaceInRange()
Dim cell As Range
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")

For Each cell In ws.Range("A1:A100")
If Not IsEmpty(cell.Value) Then
cell.Value = Replace(cell.Value, "旧社名", "新社名")
End If
Next cell
End Sub

大文字・小文字を区別せずに置換するには?

Replace関数のデフォルトでは大文字・小文字を区別します。
もし区別せずに置換を行いたい場合は、第6引数 comparevbTextCompare を指定しましょう。

Sub ReplaceIgnoreCase()
Dim result As String
result = Replace("HELLO world", "hello", "Hi", , , vbTextCompare)
MsgBox result ' 出力:Hi world
End Sub

この例では、元の文字列「HELLO world」の「HELLO」が小文字の「hello」と一致し、「Hi」に置き換えられています。


特定の列やシート全体での文字列置換

より広い範囲、たとえばシート全体を対象に置換する場合には以下のようにします。

Sub ReplaceInEntireSheet()
Dim cell As Range
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Sheet1")

For Each cell In ws.UsedRange
If VarType(cell.Value) = vbString Then
cell.Value = Replace(cell.Value, "誤字", "正字")
End If
Next cell
End Sub

UsedRangeを使うことで、データが入力されているセルの範囲全体に対して置換処理ができます。


複数のキーワードを一括置換するには?

複数の語句を一度に置き換える場合は、配列とループを使って次のように書けます。

Sub ReplaceMultipleKeywords()
Dim keywords As Variant
Dim replacements As Variant
Dim i As Integer
Dim cell As Range

keywords = Array("旧A", "旧B", "旧C")
replacements = Array("新A", "新B", "新C")

For Each cell In Range("A1:A50")
If VarType(cell.Value) = vbString Then
For i = 0 To UBound(keywords)
cell.Value = Replace(cell.Value, keywords(i), replacements(i))
Next i
End If
Next cell
End Sub

応用:ユーザーフォームから置換内容を指定して処理

以下のような応用コードでは、ユーザーフォーム上で入力した「検索語」と「置換語」を使って、置換処理を実行できます。

Sub ReplaceWithInput()
Dim findText As String
Dim replaceText As String
Dim cell As Range

findText = InputBox("置換したい文字を入力してください")
replaceText = InputBox("置換後の文字を入力してください")

For Each cell In Range("B1:B100")
If VarType(cell.Value) = vbString Then
cell.Value = Replace(cell.Value, findText, replaceText)
End If
Next cell
End Sub

このようにすることで、汎用性の高いツール的な使い方が可能になります。


まとめ:Replace関数を活用してVBAの効率をアップ!

VBAのReplace関数は非常にシンプルながら、日々のExcel作業を劇的に効率化してくれる強力なツールです。
単一のセルから複数セル、さらにはシート全体への置換や、複数キーワード対応など、実務に即した形で柔軟に対応できます。

今回紹介した方法を参考に、あなたの業務でもぜひ活用してみてください。
繰り返し作業が減ることで、業務時間の短縮やミスの防止にもつながるはずです。

upandup

Web制作の記事を中心に、暮らし、ビジネスに役立つ情報を発信します。 アフィリエイトにも参加しています。よろしくお願いいたします。