Поскольку вы запросили решение VBA, см. Приведенный ниже код.
Dim colLen As Integer
Dim i As Integer
Dim colPt As Integer
Dim rowPt As Integer
' Counts number of rows on Sheet 1, column B.
colLen = Sheets(1).Cells(Rows.Count, "B").End(xlUp).Row
' Loops through all names on Sheet 1.
For i = 2 To colLen
' Retain US or NA ID for blank cells.
If Sheets(1).Cells(i, 1) <> "" Then
If Sheets(1).Cells(i, 1) = "US" Then
colPt = 2
Else
colPt = 3
End If
End If
' Find name on Sheet 2 and set row.
rowPt = Sheets(2).Range("A:A").Find(Sheets(1).Cells(i, 2)).Row
' Add ID from Sheet 2 to Sheet 3
Sheets(1).Cells(i, 3) = Sheets(2).Cells(rowPt, colPt)
Next i
Допущения:
- Лист 1 является основным листом, лист 2 содержит данные поиска.
- Все имена в данных поиска уникальны.
Я бы рекомендовал включать идентификатор в каждую строку вместо того, чтобы рассматривать его как заголовок, но это предпочтение. Существуют формульные решения, которые также подойдут для этого, если вы хотите пропустить VBA.