VBAで文字列操作を行う際、特定の文字や部分文字列を他の文字に置き換えることがよくあります。VBAでは、この作業を簡単に行うためのReplace
関数とReplace
メソッドが用意されています。この記事では、これらの違いと使い方について詳しく説明します。
Replace関数の使い方
基本構文
Replace
関数は、文字列中の特定の部分を別の文字列に置き換えるために使用します。以下はその基本的な構文です。
Replace(Expression, Find, Replace, [Start], [Count], [Compare])
- Expression: 元の文字列。
- Find: 検索する文字列。
- Replace: 置き換える文字列。
- Start(省略可): 置き換えを開始する位置(デフォルトは1)。
- Count(省略可): 置き換える回数(デフォルトはすべて置き換え)。
- Compare(省略可): 大文字・小文字の区別をするか(
vbBinaryCompare
= 区別する,vbTextCompare
= 区別しない)。
例1: 単純な文字列置き換え
Sub SimpleReplaceExample()
Dim originalText As String
Dim newText As String
originalText = "Excel VBA is great!"
newText = Replace(originalText, "great", "awesome")
MsgBox newText ' 結果: "Excel VBA is awesome!"
End Sub
この例では、元の文字列「Excel VBA is great!」の中の「great」が「awesome」に置き換えられ、メッセージボックスに新しい文字列が表示されます。
例2: すべてのスペースをアンダースコアに置き換える
Replace
関数を使って、スペースを他の文字に置き換えることもできます。
Sub ReplaceSpacesWithUnderscore()
Dim originalText As String
Dim newText As String
originalText = "Replace spaces with underscores"
newText = Replace(originalText, " ", "_")
MsgBox newText ' 結果: "Replace_spaces_with_underscores"
End Sub
このコードでは、文字列内のすべてのスペースがアンダースコア(_
)に置き換えられます。
例3: 大文字・小文字を区別せずに置き換え
Replace関数のCompare引数を指定して、大文字と小文字を区別しない置き換えを行うことができます。
Sub ReplaceIgnoreCase()
Dim originalText As String
Dim newText As String
originalText = "Excel is Powerful. EXCEL is useful."
newText = Replace(originalText, "excel", "Microsoft Excel", , , vbTextCompare)
MsgBox newText ' 結果: "Microsoft Excel is Powerful. Microsoft Excel is useful."
End Sub
この例では、「excel」と「EXCEL」の両方が、「Microsoft Excel」に置き換えられます。vbTextCompare
を指定することで、大文字・小文字を区別せずに置き換えが行われます。
Replaceメソッドの使い方
VBAのReplace
関数とは異なり、Replace
メソッドはExcelのセル内のデータを置き換えるために使われます。これはExcelのRange
オブジェクトに適用され、シート内のデータを検索して置き換える場合に便利です。
基本構文
RangeObject.Replace(What, Replacement, [LookAt], [SearchOrder], [MatchCase], [MatchByte], [SearchFormat], [ReplaceFormat])
- What: 検索する文字列。
- Replacement: 置き換える文字列。
- LookAt(省略可): 検索する文字列の一部か全体か(
xlPart
またはxlWhole
)。 - SearchOrder(省略可): 検索する順序(
xlByRows
またはxlByColumns
)。 - MatchCase(省略可): 大文字と小文字を区別するか(
True
またはFalse
)。 - MatchByte(省略可): バイト単位での一致をするかどうか(日本語や多言語の処理で使用)。
- SearchFormat, ReplaceFormat(省略可): 書式を検索・置換する場合に使用。
例1: シート全体で文字列を置き換える
以下の例では、ワークシート内のすべてのセルで「oldValue」という文字列を「newValue」に置き換えます。
Sub ReplaceInSheet()
Sheets("Sheet1").Cells.Replace What:="oldValue", Replacement:="newValue", LookAt:=xlPart
End Sub
このコードは、Sheet1
のすべてのセル内で、「oldValue」を含む部分を「newValue」に置き換えます。LookAt:=xlPart
を指定することで、セルの一部に一致する文字列も置き換えの対象となります。
例2: 特定の列でのみ文字列を置き換える
次の例では、シートの特定の列でのみ文字列を置き換える方法を紹介します。
Sub ReplaceInColumn()
Sheets("Sheet1").Columns("A").Replace What:="Apple", Replacement:="Orange", LookAt:=xlWhole
End Sub
この例では、Sheet1
のA列で「Apple」という文字列を「Orange」に置き換えます。LookAt:=xlWhole
を指定しているため、セル全体が「Apple」である場合のみ置き換えが行われます。
例3: 大文字・小文字を区別して置き換える
大文字と小文字を区別して検索・置換を行うには、MatchCaseをTrueに設定します。
Sub ReplaceWithCaseSensitivity()
Sheets("Sheet1").Cells.Replace What:="apple", Replacement:="orange", LookAt:=xlPart, MatchCase:=True
End Sub
このコードでは、大文字・小文字を区別し、「apple」のみを「orange」に置き換えます。「Apple」や「APPLE」は置き換えの対象外となります。
例4: 書式を検索して置き換える
Replace
メソッドでは、セルの内容だけでなく、セルの書式も置き換えることができます。例えば、特定の書式を持つセルを検索し、別の書式に置き換えることができます。
Sub ReplaceFormat()
With Sheets("Sheet1").Cells
.Replace What:="", Replacement:="", SearchFormat:=True, ReplaceFormat:=True
End With
End Sub
このコードは、指定された書式を持つセルを検索し、その書式を置き換えます。SearchFormatとReplaceFormatを利用することで、書式に基づいた置換が可能です。
Replace関数とReplaceメソッドの違い
- Replace関数は文字列の一部を置き換えるために使用します。対象はセルの内容やユーザー定義の文字列など、VBAコード内で操作する文字列です。
- ReplaceメソッドはExcelシートのセル内容を検索・置換するために使います。セル範囲全体を対象にするため、大規模な置換処理に向いています。
まとめ
Replace
関数とReplace
メソッドは、VBAでの文字列やセル内容の置換処理に非常に便利なツールです。Replace
関数を使えば、文字列の一部を柔軟に置き換えることができ、Replace
メソッドを使うことで、シート内のセル範囲に対して効率的に検索と置換が可能です。どちらも頻繁に使用される操作なので、ぜひこれらの機能をマスターして、VBAの作業をより効率化しましょう!