'ネタのシートをアクティブにして実行する
'同じシートを書換えると、移動する側の数が多い場合など、後方から処理しても破壊が起きるので、結果は別シートに出す
'NotMatchの場合は、D列にエラーを表示
Option Explicit
Sub Matching()
Const xName_To = "ReLocation"
Const xKey = 1
Const xKey2 = 2
Const xHeads = 1
Dim xSheet As Worksheet
Dim xIndex
Dim xLast As Long
Dim xLast2 As Long
Dim kk As Long
Dim nn As Long
Set xSheet = ActiveSheet
On Error Resume Next
Application.DisplayAlerts = False
Worksheets(xName_To).Delete
kk = Worksheets.Count
Worksheets.Add After:=Worksheets(Worksheets.Count)
If (Worksheets.Count > kk) Then
Worksheets(Worksheets.Count).Name = xName_To
Else
Exit Sub
End If
With xSheet
xLast = .Cells(Rows.Count, xKey).End(xlUp).Row
xLast2 = .Cells(Rows.Count, xKey2).End(xlUp).Row
Application.CutCopyMode = False
.Columns(xKey).Copy
Worksheets(xName_To).Columns(xKey).PasteSpecial
.Rows(1 & ":" & xHeads).Copy
Worksheets(xName_To).Rows(1).PasteSpecial
For nn = (xHeads + 1) To xLast2
.Cells(nn, xKey2).Offset(0, 2).Value = Empty
If Not IsEmpty(.Cells(nn, xKey2)) Then
xIndex = Application.Match(.Cells(nn, xKey2).Value, .Range(.Cells(xHeads + 1, xKey), .Cells(xLast, xKey)), 0)
If IsError(xIndex) Then
.Cells(nn, xKey2).Offset(0, 2).Value = "ERROR:NotMatch!!"
Else
.Cells(nn, xKey2).Resize(1, 2).Copy Worksheets(xName_To).Cells(xIndex + 1, xKey2)
End If
End If
Next
End With
Application.CutCopyMode = False
Application.DisplayAlerts = True
End Sub