К сожалению, это довольно распространенная задача в Excel, для которой стандартный ответ, как говорит Джошуа Смит, - создать комбинированный ключ путем объединения доступных столбцов. Если вас беспокоят коллизии (например, прямая конкатенация нескольких столбцов может оставить разные значения с одним и тем же выводом), например, следующее, тогда используйте разделитель (например, символ канала |
).
Col A Col B Col C Combined Key
aaa bbb ccc aaabbbccc
aa aa aaa aaaaaaa -- Bad match...
aaa a aaa aaaaaaa -- Bad match...
Конечно, вы можете написать собственную функцию макроса, которая сделает это за вас. Логика будет что-то вроде VLOOKUP
:
Public Function VMatch(ByVal lookFor As Range, ByVal lookIn As Range) As String
'Make sure column count matches (at least!)
If lookFor.Columns.Count lookIn.Columns.Count Then
'Oops...
VMatch = "ERROR: Column counts do not match"
Exit Function
End If
'Start looking through the target range for
'a match with the source range
Dim blnFound As Boolean
Dim blnRowOK As Boolean
blnFound = False
Dim iCol As Integer
Dim iRow As Long
Dim numCols As Integer
numCols = lookFor.Columns.Count
'Loop through all rows
For iRow = 1 To lookIn.Rows.Count
'Assume current row might be ok...
blnRowOK = True
'Loop through columns
For iCol = 1 To numCols
'Test for mis-match only
If lookFor.Cells(1, iCol).Value lookIn.Cells(iRow, iCol).Value Then
blnRowOK = False
Exit For
End If
Next
'If row is still ok, we've found a match!
If blnRowOK Then
blnFound = True
Exit For
End If
Next
'If blnFound is true, we found a match
If blnFound Then
VMatch = "Match"
Else
VMatch = "No Match"
End If
End Function
Примечание. Вышеприведенная функция работает и не восприимчива к «ложным срабатываниям» - она также пытается быть менее неэффективной, выпрыгивая при попадании в совпадение, но я не могу гарантировать, что она будет работать во всех случаях. *
Чтобы использовать функцию, вы должны ссылаться на диапазон всех столбцов в данной строке как lookFor и весь диапазон всех возможных совпадающих строк в lookIn, например, =VMatch(A1:C1,Sheet2!A1:C29)
если совпадающая вещь находилась в ячейках текущего листа A1:C1
, а другой набор данных находился в Sheet2
при переходе от первой строки к строке 29.