Добрый день. Не могу решить проблему из-за ограничений цикла For Next.
Есть 2 листа, пытаюсь сравнить значения циклом For Next.
Проблема:
- при совпадении условий оператор закрашивает ячейку и выходит из цикла i из-за наличия Exit For и переходит к следующей проверке. Однако так как много повторяющихся значений, то в следующий цикл он опять закрашивает тоже самое значение, которое уже закрасил и опять выходит. Итог - вместо 10 одинаковых строк закрашена всего 1.
- убираем цикл Exit For. В итоге закрашенных значений получаем больше чем должно быть. Оператор находит совпадения и тупо все их красит. Итог - вместо 7 закрашенных и 7 не закрашенных ячеек, получаем все 14 закрашенных.
Прошу подсказать решение. Файл прикрепить не смогу из-за наложенных безопасниками ограничений
Код |
---|
Sub Cycle_with_Massive_zalivka_bez_cycles() Dim Naimenovanie As Variant
Dim Zalivka As Variant
Dim MyArray1() As Variant
Dim MyArray2() As Variant
Dim j%, i%
Set Analiz = Sheets(Лист4.Name)
Set TDSheet = Sheets(Лист3.Name)
Application.ScreenUpdating = False
With TDSheet
MyArray1 = .Range(.Cells(1, 2), .Cells(7948, 2)).Value
End With
With TDSheet
MyArray2 = .Range(.Cells(1, 12), .Cells(7948, 12)).Value
End With
' Cycle J
For j = 1 To 7895
Naimenovanie = Analiz.Cells(j, 2)
Summa = Analiz.Cells(j, 13)
Zalivka = Analiz.Cells(j, 2).Interior.Color
Data = Analiz.Cells(j, 16)
Nomer_Akta = Analiz.Cells(j, 17)
Otpravka_s_reestrom = Analiz.Cells(j, 18)
Na_soglasovanii = Analiz.Cells(j, 19)
Ispolnitel = Analiz.Cells(j, 20)
V_Rabote = Analiz.Cells(j, 21)
Vozvrat = Analiz.Cells(j, 22)
Primech = Analiz.Cells(j, 23)
' Cycle i
For i = 1 To 7948
If MyArray1(i, 1) = Naimenovanie And MyArray2(i, 1) = Summa Then
TDSheet.Cells(i, 2).Interior.Color = Zalivka
TDSheet.Cells(i, 15) = Data
TDSheet.Cells(i, 16) = Nomer_Akta
TDSheet.Cells(i, 17) = Otpravka_s_reestrom
TDSheet.Cells(i, 18) = Na_soglasovanii
TDSheet.Cells(i, 19) = Ispolnitel
TDSheet.Cells(i, 20) = V_Rabote
TDSheet.Cells(i, 21) = Vozvrat
TDSheet.Cells(i, 22) = Primech
Exit For
End If
Next i
Next j
Application.ScreenUpdating = True
End Sub |