говорю, забудь про SpecialCells
. Просто загрузите все ячейки, которые необходимо протестировать, в массив Variant. Затем зациклите этот массив и сделайте свое ограничение. Это очень эффективно, в отличие от зацикливания на ячейках листа. Наконец, запишите его обратно на лист.
С 50 000 ячеек, содержащих случайные значения от 0 до 2, этот код выполнялся за 0,2 с на моем старинном ноутбуке.
Дополнительным бонусом является то, что это довольно понятный и читаемый код, и вы сохраняете полный контроль над тем, какой диапазон будет использоваться.
Dim r As Range
Dim v As Variant
Set r = Sheet1.UsedRange
' Or customise it:
'Set r = Sheet1.Range("A1:HZ234") ' or whatever.
v = r ' Load cells to a Variant array
Dim i As Long, j As Long
For i = LBound(v, 1) To UBound(v, 1)
For j = LBound(v, 2) To UBound(v, 2)
If IsNumeric(v(i, j)) And v(i, j) > 1 Then
v(i, j) = 1 ' Cap value to 1.
End If
Next j
Next i
r = v ' Write Variant array back to sheet.