Replaceメソッドの概要
Replaceメソッドは、ワークシート上のオブジェクト(セルなど)に対して、文字列の置換を行うメソッドです。
Excelの置換コマンドと同等の機能となります。
Replaceメソッドに似た機能として、Replace関数がありますが、この2つは以下のような違いがあります。
機能名 | 解説 |
---|---|
Replaceメソッド | 1回の置換で、ワークシート上の以下のようなオブジェクト全体に対して置換を行います。 セル 行全体 列全体 RangeやCellsなどで指定した範囲、等 ワークシート上のオブジェクト以外のマクロ内で作成した変数などには使用できません。 行・列全体や範囲指定をして置換を実行した場合、対象の領域に対して、条件に合致する文字列を一括置換するため、ワークシート上の広い領域の置換では、Replace関数よりReplaceメソッドの方が、一般的に短いコードで高速に処理します。 |
Replace関数 | Replaceメソッドと異なり、1回の置換で1つのセルや変数の値の置換を行います。 一般的にReplaceメソッドのように大量&高速な置換はできませんが、以下のような場合にはReplace関数を使うことになります。 マクロ内で作成した変数に対する置換 ループ文でワークシート上のセルを走査し、セルの値に応じて置換処理を細かく 制御する必要がある場合 |
参考情報 Replace関数に関する詳しい解説はこちら→【VBA】13.1 Replace関数を使ってみよう!
[overdoserの経験則] Replaceメソッドを実際の業務で使用するケース
Replaceメソッドは、Excel上のワークシートの編集で利用されていると思いますので、イメージしやすいかと思いますが、実際の業務で使用するExcelマクロでは、以下のようなケースが想定されます。
- データのフォーマット変換を行うマクロで、元データのある列について、ある特定のキーワードのみ一律置換するような場合。
- 社内システムのトランザクションデータのついて、ファイルベースで他システムにI/FするデータをExcelマクロでフォーマット変換で置換を行う必要がある場合に、トランザクションデータの件数が多く、処理時間も短くするような要件である場合。
Replaceメソッドの構文
Replaceメソッドの構文は、以下の通りです。
- Worksheet変数.Range(“設定値”).Replace What:=.”設定値”, Replacement:=”設定値”, LookAt:=”設定値”, MatchCase:=”設定値”, MatchByte:=”設定値”,
上記の構文では、置換対象をWorksheet変数.Range(“設定値”)の領域にある全てのセルとし、各種条件に従って、Whatに設定された文字列をReplacementに設定された文字列で置換する、という処理を行います。
引数名 | 必須/ 任意 | 解説 |
---|---|---|
What | 必須 | 置換をする際の、置換したい文字列を指定します。 |
Replacement | 必須 | 置換をする際の、置換後の文字列を指定します。 |
LookAt | 任意(*) | 以下のいずれかの値を設定します。 xlPart:置換する文字列が、検索対象文字列に部分一致した場合に置換を実行 xlwhole:置換する文字列が、検索対象文字列に完全一致した場合に置換を実行 |
MatchCase | 任意(*) | 以下のいずれかの値を設定します。 True:大文字と小文字を区別する場合 False:大文字と小文字を区別しない場合 |
MatchByte | 任意(*) | 以下のいずれかの値を設定します。 True:全角と半角を区別する場合 False:全角と半角を区別しない場合 |
*:省略した場合は、前回に置換処理を行った際の設定を用いて置換処理を行います。
注意 Replaceメソッドの引数には上記以外に、「SearchOrder」、「SearchFormat」、「ReplaceFormat」もありますが、使用頻度が低いため、割愛しました。
Replaceメソッドの使用例
Replaceメソッドを実際に使用した例は、以下の通りです。
ws_employeelist.Columns(5).Replace What:="A01001", Replacement:="B01001", LookAt:=xlwhole
上記のサンプルコードは、以下の処理を行っています。
- 社員一覧シート(ws_employeelist)の5列目の部署コードの値が”A01001″に完全一致した場合は、”B01001″に置換する。
[応用編] Replaceメソッドを用いたコーディング例
今回のコーディング例は、以下の要件を実現するものです。
- 来年度から、部署コードが以下のように変更になるため、社員一覧シートの部署コードの値を置換する。
“A01001” → “B01001”
“A11001” → “B11001”
以下のソースコードは、上記のコーディング例をサンプルプログラムに組み込み、実際に動作するようにしたものです。
Option Explicit
Sub replace_employeelist()
Dim ws_macro As Worksheet '社員データ抽出マクロファイル内の社員データ抽出マクロシートのワークシート変数
Dim ws_work As Worksheet '社員データ抽出マクロファイル内のworkシートのワークシート変数
Dim wb_inputfile As Workbook '入力ファイルのワークブック変数
Dim ws_employeelist As Worksheet '入力ファイルの社員一覧シートのワークシート変数
Dim ws_positionlist As Worksheet '入力ファイルの役職一覧シートのワークシート変数
Dim path_inputfile As String '入力ファイルのフルパスを設定する変数
Dim wb_outputfile As Workbook '出力ファイルのワークブック変数
Dim ws_outputfile As Worksheet '出力ファイルのワークシート変数
Dim path_outputfile As String '出力ファイルのフルパスを設定する変数
Application.ScreenUpdating = False
Set ws_macro = ThisWorkbook.Worksheets("社員データ置換マクロ")
Set ws_work = ThisWorkbook.Worksheets("work")
If Right(ws_macro.Range("D3"), 1) <> "\" Then
path_inputfile = ws_macro.Range("D3") & "\" & ws_macro.Range("C3")
Else
path_inputfile = ws_macro.Range("D3") & ws_macro.Range("C3")
End If
Workbooks.Open Filename:=path_inputfile
Set wb_inputfile = ActiveWorkbook
Set ws_employeelist = ActiveWorkbook.Worksheets("社員一覧")
Set ws_positionlist = ActiveWorkbook.Worksheets("役職コード一覧")
If Right(ws_macro.Range("D4"), 1) <> "\" Then
path_outputfile = ws_macro.Range("D4") & "\" & ws_macro.Range("C4")
Else
path_outputfile = ws_macro.Range("D4") & ws_macro.Range("C4")
End If
ws_employeelist.Columns(5).Replace What:="A01001", Replacement:="B01001", LookAt:=xlWhole
ws_employeelist.Columns(5).Replace What:="A11001", Replacement:="B11001", LookAt:=xlWhole
ws_employeelist.Copy
Set wb_outputfile = ActiveWorkbook
wb_inputfile.Close SaveChanges:=False
wb_outputfile.Close SaveChanges:=True, Filename:=path_outputfile
MsgBox "部署コードの置換が完了しました。"
ws_macro.Activate
ThisWorkbook.Save
Application.ScreenUpdating = True
End Sub
上記のマクロを実行すると、以下の結果となります。
[応用編] ソースコードの解説
開始行数 | 終了行数 | 処理概要 |
---|---|---|
20 | 29 | マクロシートに記載された入力ファイルをOpenし、 入力ファイル用のワークブック変数、ワークシート変数を設定する。 |
31 | 35 | 出力ファイルを保存するための出力パスの編集を行っている。 |
37 | 37 | 役職コードに対して、”A01001″ → “B01001″の置換を実行している。 |
39 | 39 | 役職コードに対して、”A11001″ → “B11001″の置換を実行している。 |
41 | 42 | 入力ファイルで置換を行ったが、今年度の社員一覧シートと置換後の来年度の社員一覧シートは別々に保存しておくため、入力ファイルを新規のExcelファイルとして別ファイルを作成し、そこに置換を行った社員一覧シートをコピーしている。 |
44 | 44 | 入力ファイルを保存せずにCloseしている。 |
46 | 46 | 出力ファイルを保存してCloseしている。 |
48 | 54 | 後処理を行っている。 |