Excel - два списка значений ключа - найдите, где ключ отличается, но значение одинаково - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть два списка значений ключа.

напр.

Таблица 1

ID      Value
1       Example A
2       Example B

и

Таблица 2

ID      Value
1       Example A
3       Example B

Мне нужно знать, где совпадают значенияно идентификатор другой.В приведенном выше примере это будет Пример B, потому что в Таблице 1 он имеет идентификатор 2, а в Таблице 2 он имеет идентификатор 3

. Я считаю, что мог бы использовать функции INDEX или MATCH, но я неуверен, как это сделать?

Ответы [ 4 ]

0 голосов
/ 25 сентября 2018

Можно попробовать с формулой совпадения.

H, G: значение поиска (таблица 2)

B, A: массив поиска (таблица 1)

ctrl +shift + Enter

{=IF(ISNUMBER(MATCH(1,(H2=B2:B3)*(G2=A2:A3),0)),"Match","Not Match")}
0 голосов
/ 25 сентября 2018

Предполагая, что ваши данные находятся на одном листе, вы можете использовать приведенную ниже простую формулу для сравнения ячеек.

enter image description here

0 голосов
/ 25 сентября 2018

Только для S & G:

VBA не требуется, но я хотел поиграть с созданием базового UDF с использованием класса .Net System.Collections SortedList.Это основано на предположении, что значения не повторяются в таблице (с точки зрения возврата правильного результата.).

Arg 1 rng1 - первый диапазон таблицы, исключая заголовки

Arg 2 rng2 - это второй диапазон таблицы, исключая заголовки

Arg 3 testValue - это строковое значение для проверяемого значения, имеющего совпадающий идентификатор для всех таблиц.Вы можете положиться на доступ к элементу по умолчанию, передав один диапазон ячеек или явно передав буквенную строку.

Option Explicit
Public Sub test()
   Debug.Print MatchingKey([A2:B3], [D2:E3], [B3])
End Sub
Public Function MatchingKey(ByVal rng1 As Range, ByVal rng2 As Range, ByVal testValue As String) As Variant
    Dim aList As Object, bList As Object, aArray(), bArray(), i As Long

    If rng1.Columns.Count <> 2 Or rng2.Columns.Count <> 2 Then
        MatchingKey = CVErr(xlErrNA)
        Exit Function
    End If
    On Error GoTo errhand
    Set aList = CreateObject("System.Collections.SortedList")
    Set bList = CreateObject("System.Collections.SortedList")

    aArray = rng1.value
    bArray = rng2.value

    For i = LBound(aArray, 1) To UBound(aArray, 1)
        aList.Add aArray(i, 1), aArray(i, 2)
    Next
    For i = LBound(bArray, 1) To UBound(bArray, 1)
        bList.Add bArray(i, 1), bArray(i, 2)
    Next

    If Not aList.ContainsValue(testValue) Or Not bList.ContainsValue(testValue) Then
        MatchingKey = CVErr(xlErrNA)
        Exit Function
    End If

    MatchingKey = aList.GetKey(aList.IndexOfValue(testValue)) = bList.GetKey(bList.IndexOfValue(testValue))
    Exit Function
errhand:
    MatchingKey = CVErr(xlErrNA)
End Function

Пример на листе:

enter image description here

0 голосов
/ 25 сентября 2018

Предполагая, что порядок столбцов был переключен, мы могли бы довольно легко использовать VLOOKUP здесь:

Sheet 1, Table 1
A              B      C
Example A      1
Example B      2      DIFFERENT

Sheet 2, Table 2
A              B
Example A      1
Example B      3

Введите следующую формулу в C1 на первом листе с таблицей 1:

=IF(B1=IFERROR(VLOOKUP(A1, Sheet2!A1:B2, 2, FALSE), ""), "", "DIFFERENT")

Обратите внимание, что вам может потребоваться настроить ссылки на ячейки и диапазоны, используемые в формуле.Например, я тривиально предполагаю, что в обеих таблицах есть только две строки данных, хотя на самом деле их, вероятно, больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...