К сожалению, это довольно распространенная задача в 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
Примечание. Приведенная выше функция работает и не подвержена «ложным срабатываниям» — она также пытается быть менее неэффективной, выпрыгивая, если попадает в спичку, но я не могу гарантировать, что она будет работать во всех случаях.
Чтобы использовать эту функцию, вы должны сослаться на диапазон всех столбцов в данной строке как на поиск и на весь диапазон всех возможных совпадающих строк в поиске, например. =VMatch(A1:C1,Sheet2!A1:C29)
, если то, что вы сопоставляли, было в текущих ячейках листа A1:C1
, а другой набор данных был в Sheet2
, начиная с первой строки до строки 29.
person
AJ.
schedule
24.03.2010