Найти несоответствующие строки с помощью Application.Match в двух массивах в Excel VBA - PullRequest
0 голосов
/ 11 марта 2019

Я нашел индекс отсутствующих массивов, используя следующую функцию в Excel VBA:

absentArr = Application.Match(Data, varrayReference, False)

Как извлечь значения, отсутствующие в массиве «Данные» при сравнении со ссылочным массивом «varrayReference»?

Я могу видеть несоответствующие массивы в массиве "absentArray", но мне нужны соответствующие недостающие идентификаторы, которые есть в массиве "Data" (например, Data (18), Data (20), которые показываютне соответствует в "absentArray").Есть ли способ получить недостающие ячейки в массиве «Данные»?Спасибо!

enter image description here

enter image description here

1 Ответ

1 голос
/ 11 марта 2019

Не используйте VBA'a Filter, если хотите совпадение 1: 1; Фильтр действует как поиск по шаблону, поэтому положительные результаты будут найдены для 123 в qw123op и df123uy .

Использование функции соответствия на рабочем листе позволяет быстро найти совпадения 1: 1, но без учета регистра.

Sub findMissing()

    Dim i As Long, j As Long
    Dim data As Variant, absentArray As Variant, missingData As Variant
    Dim dict as object, k as variant

    Set dict = CreateObject("scripting.dictionary")
    dict.CompareMode = vbTextCompare

    data = Array("AB", "BC", "CD", "DE", "EF", "FG", "GH")
    absentArray = Array("AB", "BC", "DE", "GH")
    ReDim missingData(LBound(data) To UBound(data))

    j = LBound(data)
    For i = LBound(data) To UBound(data)
        If IsError(Application.Match(data(i), absentArray, 0)) Then
            'method one with array
            missingData(j) = data(i)
            j = j + 1
            'method two with dictionary
            dict.Item(data(i)) = vbNullString
        End If
    Next i
    ReDim Preserve missingData(j - 1)

    For i = LBound(missingData) To UBound(missingData)
        Debug.Print missingData(i)
    Next i

    For Each k in dict.Keys
        Debug.Print k
    Next k

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