Excel VBAを使って作業を自動化したいと考えている方にとって、「文字列の置換」はよく使う基本操作のひとつです。
たとえば、Excelシートの中で特定の語句を一括で書き換えたり、ファイル名やデータを一括修正したりする場面で非常に役立ちます。
本記事では、VBAの基本的な文字列置換方法から、複数条件での置換、セル範囲への応用まで、実務で使えるテクニックを含めて丁寧に解説します。
初心者でも理解できるように、具体的なコード例とともにご紹介していきます。
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
次は、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引数 compare
に vbTextCompare
を指定しましょう。
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
このようにすることで、汎用性の高いツール的な使い方が可能になります。
VBAのReplace
関数は非常にシンプルながら、日々のExcel作業を劇的に効率化してくれる強力なツールです。
単一のセルから複数セル、さらにはシート全体への置換や、複数キーワード対応など、実務に即した形で柔軟に対応できます。
今回紹介した方法を参考に、あなたの業務でもぜひ活用してみてください。
繰り返し作業が減ることで、業務時間の短縮やミスの防止にもつながるはずです。