У меня есть столбец чисел и 11 интервалов. Я хотел поместить каждое число в интервал, которому оно принадлежит, а также определить, близко ли число к верхней или нижней границе.
Например: если первое число равно 210, и оно должно быть в моем интервале от 180 до 365, и оно близко к 180, то верните «Нижняя граница».
Вот мой код, однако он работал слишком медленно! У меня всего 5197 номеров, но на его запуск уходит около 202 секунд, более 3 минут! Я хочу обратиться к вам за помощью: где моя программа неэффективна и как повысить эффективность?
Если у меня еще больше чисел или больше критериев для добавления, программа должна быть еще медленнее: (
Большое спасибо !!
Sub test()
bgn = Timer
Application.ScreenUpdating = False
Dim T(1 To 12) As Integer 'My intervals
T(1) = 1
T(2) = 7
T(3) = 14
T(4) = 30
T(5) = 60
T(6) = 90
T(7) = 180
T(8) = 365
T(9) = 730
T(10) = 1095
T(11) = 1460
T(12) = 1825
For p = 4 To 5200 'My first number starts at row 4, so total 5197 numbers up to row 5200
For q = 1 To 11
'My column of numbers are in column G
If Range("G" & p) > T(q) And Range("G" & p) <= T(q + 1) Then
Range("H" & p) = T(q) 'Lower bound number
Range("I" & p) = T(q + 1) 'Upper bound number
'Determine closer to upper bound or lower bound
If Abs(Range("G" & p) - T(q)) >= Abs(Range("G" & p) - T(q + 1)) Then
Range("J" & p) = "Upper Bound"
Else
Range("J" & p) = "Lower Bound"
End If
Exit For
End If
Next q
Next p
MsgBox Timer - bgn
End Sub