複数の置換を一度に処理
複数の置換を一度に処理する
前提条件
- A列のデータを、C、D列のデータ通りに置換する(共に実データは2行目から)
- A列、C,D列共に、行数に制限はないものとする
仕様
- 列は固定だが、定数としてソース上で定義する
- C,D列の語句一つ一つを、Range.Replaceを使用してA列一括置換
VBAコード
Sub ReplaceWord()
'各列を定義
Const lngTargetCol As Long = 1 '置換対象列
Const lngBeforeWordCol As Long = 3 '置換前列
Const lngAfterWordCol As Long = 4 '置換後列
Const lngTargetStartRow As Long = 2 '置換対象列の実データ開始行
Const lngBeforeWordStartRow As Long = 2 '置換前列の実データ開始行
Dim lngTargetMaxRow As Long
Dim lngBeforeWordMaxRow As Long
Dim i As Integer
'各列の最終行を取得
lngTargetMaxRow = lngGetMaxRow(ActiveSheet, lngTargetCol) '置換対象列の実データ最終行
lngBeforeWordMaxRow = lngGetMaxRow(ActiveSheet, lngBeforeWordCol) '置換前列の実データ最終行
'置換語句の数(置換前列の実データ数)だけ置換処理を繰り返す
For i = lngBeforeWordStartRow To lngBeforeWordMaxRow
'【Range.Replace】を使用
'構文:Range(【置換対象データ範囲】).replace(【検索前語句】、【検索後語句】)
Call Range(Cells(lngTargetStartRow, lngTargetCol), Cells(lngTargetMaxRow, lngTargetCol)).Replace(Cells(i, lngBeforeWordCol).Value, Cells(i, lngAfterWordCol).Value)
Next i
End Sub
呼び出し関数
'------------------------------------------------------
'表内最大行を取得
'
' 戻値:表内最大行
'
' 引数:対象ワークシート
' :カウント基準となる列(省略時:1(A列))
'
' 注意:オートフィルター、非表示は解除してから行うこと
'-------------------------------------------------------
Function lngGetMaxRow(wsWorksheet As Worksheet, Optional lngCountBaseCol As Long = 1) As Long
Dim lngMaxRow As Long
lngMaxRow = wsWorksheet.Cells(Rows.Count, lngCountBaseCol).End(xlUp).Row 'シート最大行からCtrl+↑で表内最大行取得
lngGetMaxRow = lngMaxRow
End Function
実行後 ↓