Прошу прощения, если это дубликат, так как я искал и не нашел ответа. Я новичок в VBA и в том, как они структурируют циклы. Попробую поискать и сравнить. Мне нужно сравнить значения в первой строке, чтобы увидеть, соответствуют ли они второй строке, а если нет, то продолжить переход к следующей строке. См. мой код ниже (он работает без ошибок, просто не находит никаких существующих значений, поскольку я могу выполнить поиск вручную и найти их)
Этот набор данных может быть очень большим, поэтому я хочу написать его как можно эффективнее и не уверен, какие структуры циклов будут выполняться быстрее. Мне нужно сравнить значение в столбце 21 и посмотреть, есть ли повторяющееся значение, если есть, то мне нужно посмотреть, совпадают ли значения в столбце 22 соответствующих строк, и если они есть, то я хочу перейти к следующая строка в RowB, иначе, если они не совпадают, я хочу проверить значения в строке 4, которые являются обеими датами, и посмотреть, находятся ли они в пределах 2 месяцев друг от друга. Если их нет, продолжайте искать.
Dim RowsCount As Integer
Dim ColCount As Integer
RowsCount = Cells(Rows.Count, 1).End(xlUp).Row
ColCount = Cells(1, Columns.Count).End(xlToLeft).Column
Dim RowA As Integer
Dim RowB As Integer
Dim GroupA As Variant
Dim GroupB As Variant
Dim CounterA As Variant
Dim CounterB As Variant
Dim RevDateA As Date
Dim RevDateB As Date
Dim RevDateDiff As Variant
RowA = 2
RowB = 3
Do While RowA <= RowsCount
GroupA = Cells(RowA, 21).Value
CounterA = Cells(RowA, 22).Value
RevDateA = Cells(RowA, 4).Value
Do While RowB <= RowsCount
GroupB = Cells(RowB, 21).Value
CounterB = Cells(RowB, 22).Value
RevDateB = Cells(RowB, 4).Value
If GroupA = GroupB Then
If CounterA = CounterB Then 'go down 1 row in B and repeat
Else
If RevDateB - RevDateA < 62 Then
'highlight row b and move on
Rows(RowB).Select
Application.CommandBars.ExecuteMso "CellFillColorPicker"
Else
End If
End If
Else 'go down 1 row in B and repeat check
End If
RowB = RowB + 1
Loop
RowA = RowA + 1
Loop
As Long
вместоAs Integer
. Целочисленные переполнения выше ~32 000 - person Tim Williams   schedule 13.06.2017If CounterA <> CounterB Then ...
. Кроме того, вы можете комбинировать проверки критериев, используяAnd
--If GroupA = GroupB And CounterA <> CounterB And RevDateB - RevDateA < 62 Then ...
. - person Zev Spitz   schedule 13.06.2017