VBA備忘録

VBAソースの備忘録。当面Excelのみ。

複数の置換を一度に処理

複数の置換を一度に処理する

 

前提条件

  • 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

 

 

実行後 ↓