VBA - Сравнение аномалий с использованием варианта

Я нашел пару других вопросов, касающихся вариантов, но ни один из них, похоже, не касается моей проблемы.

У меня очень простые циклы для сравнения. Цель состоит в том, чтобы покрасить ячейку Excel красным, если нет совпадения. Результаты точны на 99%, но я заметил пару, казалось бы, случайных ошибок. Например, ячейка, содержащая число 104875, не окрашена в красный цвет, что указывает на наличие соответствующей ячейки в столбце сравнения. Но нет. Кажется, что все они должны быть не правы или все должны быть правильными. В некоторых других ветках о вариантах упоминалось, что сравнения должны быть одного типа, иначе вы получите странные ошибки. В моем случае они одного типа (оба целые), так что это не проблема.

Я новичок в VBA и все еще пытаюсь понять, как это работает.

Это соответствующая часть кода:

Private Sub CommandButton1_Click()

Dim i As Long, j As Long
Dim flag As Boolean
Dim array1() As Variant, array2() As Variant
Dim column1 As Double
Dim column2 As Double

column1 = convertColumn(TextBox1.Text)
column2 = convertColumn(TextBox2.Text)

Set wb1 = Workbooks("Advocate July 2017 Data.xlsm").Sheets(1)
Set wb2 = Workbooks("BI Report 8-18-17.xlsm").Sheets(1)

array1 = Intersect(wb1.Columns(column1), wb1.UsedRange)
array2 = Intersect(wb2.Columns(column2), wb2.UsedRange)


For i = 2 To UBound(array1)
    flag = False
    For j = 2 To UBound(array2)
        If IsNumeric(array1(i, 1)) And IsNumeric(array2(j, 1)) Then If CDbl(array1(i, 1)) = CDbl(array2(j, 1)) Then flag = True
        Next j
    If Not flag Then wb1.Cells(i, column1).Interior.Color = vbRed
Next i
End Sub

РЕДАКТИРОВАТЬ: Оказывается, мой код работает нормально. Проблема заключалась в том, что некоторые камеры на одном из листов были спрятаны, и я этого не осознавал. ~ Facepalm~ это то, что я получаю за то, что я неопытный в отличном

1 ответ

Попробуйте упростить свой код до чего-то легко воспроизводимого. Например, предположим, что вы хотите сравнить первые 50 ячеек в столбцах A и B в активном листе. Введите некоторые значения, и это будет выглядеть так:

Option Explicit

Public Sub TestMe()

    Dim array1      As Variant
    Dim array2      As Variant
    Dim i           As Long
    Dim j           As Long
    Dim flag        As Boolean

    With ActiveSheet
        array1 = .Range("A1:A50")
        array2 = .Range("B1:B50")
        .Range("A1:A10").Interior.Color = vbWhite

        For i = LBound(array1) To UBound(array1)
            flag = False

            For j = LBound(array2) To UBound(array2)
                If array1(i, 1) = array2(j, 1) Then flag = True
            Next j

            If Not flag Then .Cells(i, 1).Interior.Color = vbRed
        Next i

    End With

End Sub

Затем попробуйте адаптировать решение к вашему. Он должен работать.

Другие вопросы по тегам