INDEX MATCH в VBA выдает ошибку несоответствия типов - PullRequest
0 голосов
/ 28 июня 2019

Получение ошибки несоответствия типов в приведенном ниже коде. Намерение состоит в том, чтобы вернуть логическое значение в ячейку, которая сравнивает результаты двух выходных данных из двух разных диапазонов. Один диапазон - это просто функция range (), другой - результат, найденный в INDEX MATCH. Функция MATCH выдает ошибку, но я не могу понять, почему.

Есть 2 варианта, которые я попробовал ниже.

dim i as long, j as long  
Dim index As Variant
Dim compare As Variant
Dim bool As Boolean  
i = 11
Do While i < RAGlastRow + 1
    j = 41
    Do While j < 44
        RAGspreadsheet.Cells(i, j) = Application.IsError(Application.Match(RAGspreadsheet.Range("C" & i).Value, HistoryWS.Range("C11", "C" & lastRow), 0))
        j = j + 1
        index = Application.index(HistoryWS.Range(Cells(11, 7).Address, Cells(lastRow, 7).Address), Application.Match(RAGspreadsheet.Range("C" & i).Value, HistoryWS.Range("C11", "C" & lastRow), 0))
        compare = RAGspreadsheet.Range("H" & i)
        bool = index <> compare
        RAGspreadsheet.Cells(i, j) = bool
        j = j + 1
        RAGspreadsheet.Cells(i, j) = RAGspreadsheet.Range("I" & i) <> Application.index(HistoryWS.Range(Cells(11, 8).Address, Cells(lastRow, 8).Address), Application.Match(RAGspreadsheet.Range("C" & i).Value, HistoryWS.Range("C11", "C" & lastRow), 0))
        j = j + 1
    Loop
    i = i + 1
Loop

или

dim i as long, j as long
i = 11
Do While i < RAGlastRow + 1
    j = 41
    Do While j < 44
        RAGspreadsheet.Cells(i, j) = Application.IsError(Application.Match(RAGspreadsheet.Range("C" & i).Value, HistoryWS.Range("C11", "C" & lastRow), 0))
        j = j + 1
        RAGspreadsheet.Cells(i, j) = RAGspreadsheet.Range("H" & i) <> Application.index(HistoryWS.Range(Cells(11, 7).Address, Cells(lastRow, 7).Address), Application.Match(RAGspreadsheet.Range("C" & i).Value, HistoryWS.Range("C11", "C" & lastRow), 0))
        j = j + 1
        RAGspreadsheet.Cells(i, j) = RAGspreadsheet.Range("I" & i) <> Application.index(HistoryWS.Range(Cells(11, 8).Address, Cells(lastRow, 8).Address), Application.Match(RAGspreadsheet.Range("C" & i).Value, HistoryWS.Range("C11", "C" & lastRow), 0))
        j = j + 1
    Loop
    i = i + 1
Loop

Это часть MATCH функции INDEX MATCH, которая, кажется, выдает ошибку.

1 Ответ

2 голосов
/ 28 июня 2019

Объясняя мой комментарий.Это относится ко ВСЕМУ вашему коду, хотя я остановлюсь на index для этого объяснения.

Вы написали:

index = Application.index(HistoryWS.Range(Cells(11, 7).Address, Cells(lastRow, 7).Address), Application.Match(RAGspreadsheet.Range("C" & i).Value, HistoryWS.Range("C11", "C" & lastRow), 0))

Вы не прошли все свои Cells() черези вы переключаетесь между Range("A1") и Cells(1,1), что затрудняет согласованность.См .:

index = Application.index(HistoryWS.Range(HistoryWS.Cells(11, 7), HistoryWS.Cells(lastRow, 7)), Application.Match(RAGspreadsheet.Cells(i, 3).Value, HistoryWS.Range(HistoryWS.Cells(11, 3), HistoryWS.Cells(lastRow, 3)), 0))

Я также удалил .Address из диапазонов.


Возможно, вам следует использовать оператор With, чтобы его было легче читать:

With HistoryWS
    index = Application.index(.Range(.Cells(11, 7), .Cells(lastRow, 7)), Application.Match(RAGspreadsheet.Cells(i, 3).Value, .Range(.Cells(11, 3), .Cells(lastRow, 3)), 0))
End With

Обратите внимание, что . поддерживается так, что HistoryWS всегда определяет соответствующие диапазоны.

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