| 
    
     |  | 'Dictionaryを使うとコードが幾らか簡単に成ります? 'でも、遅そう?
 
 Option Explicit
 
 Public Sub Sample2()
 
 Dim i As Long
 Dim j As Long
 Dim lngRows As Long
 Dim lngColumns As Long
 Dim rngList As Range
 Dim rngResult As Range
 Dim vntData As Variant
 Dim blnDirty As Boolean
 Dim dicIndex As Object
 Dim strProm As String
 
 'Sheet1Listの左上隅セル位置を基準として設定
 Set rngList = Worksheets("Sheet1").Cells(1, "A")
 
 'Sheet2Listの左上隅セル位置を基準として設定
 Set rngResult = Worksheets("Sheet2").Cells(1, "A")
 
 'Dictionaryオブジェクトを取得
 Set dicIndex = CreateObject("Scripting.Dictionary")
 
 With rngList
 'Sheet1データ行数を取得
 lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row + 1
 'データが無い場合
 If lngRows <= 1 And .Value = "" Then
 strProm = "データが有りません"
 GoTo Wayout
 End If
 'A、B列データを配列に取得
 vntData = .Resize(lngRows, 2).Value
 End With
 'A、B列データをA列をKeyとしてdicIndexに登録
 With dicIndex
 For i = 1 To lngRows
 '既に登録が無い場合
 If Not .Exists(vntData(i, 1)) Then
 '登録
 dicIndex(vntData(i, 1)) = vntData(i, 2)
 End If
 Next i
 End With
 
 With rngResult.Parent
 'Sheet2データ行数を取得
 lngRows = .UsedRange.Rows.Count
 '行が無い場合
 If lngRows <= 0 Then
 strProm = "Sheet2にデータが有りません"
 GoTo Wayout
 End If
 'Sheet2データ列数を取得
 lngColumns = .UsedRange.Columns.Count
 '列が1の場合
 If lngColumns <= 0 Then
 lngColumns = 2
 End If
 End With
 
 '画面更新を停止
 Application.ScreenUpdating = False
 
 'Sheet2を行単位で処理
 With dicIndex
 For i = 0 To lngRows - 1
 '1行のデータを配列に取得
 vntData = rngResult.Offset(i).Resize(, lngColumns).Value
 '置き換えFlagをクリア
 blnDirty = False
 '行の先頭〜最終列まで繰り返し
 For j = 1 To lngColumns
 'データが""では無い場合
 If vntData(1, j) <> "" Then
 'Sheet1のA列から、一致するデータが有った場合
 If .Exists(vntData(1, j)) Then
 'データを置換
 vntData(1, j) = .Item(vntData(1, j))
 '置き換えFlagを立てる
 blnDirty = True
 End If
 End If
 Next j
 '置き換えが有った場合
 If blnDirty Then
 '行データを出力
 rngResult.Offset(i).Resize(, lngColumns).Value = vntData
 End If
 Next i
 End With
 
 strProm = "処理が完了しました"
 
 Wayout:
 
 '画面更新を再開
 Application.ScreenUpdating = True
 
 Set rngList = Nothing
 Set rngResult = Nothing
 Set dicIndex = Nothing
 
 MsgBox strProm, vbInformation
 
 End Sub
 
 |  |