Доброй ночи,
Прошу помочь ускорить макрос, который написал для следущей цели:
Имеется диапазон чисел в столбике Length и RESULT.
Изходя из столбика X необходимо найти максимальное число из столбика RESULT между двумя X т.е. X соответствует данным из Length.
Предположим по примеру для X=1 X=5 необходимо найти максимальное число из столбика RESULT (равно 2). Потом для X=5 X=9 и т.д.
Я делал при помощи поиска определяя номер строки для X из столбика Length и дальше определив регион для RESULT нахожу максимальное число.
Но, как оказалось, для больших задачь очень медленно работает. Прошу посмотреть пример.
Может есть у кого-то идеи как можно ускорить макрос? Или возможно у меня совершенно все некорректно?
В приложение сам пример и ниже код.
Очень буду благодарен за помощь. Спасибо.
Прошу помочь ускорить макрос, который написал для следущей цели:
Имеется диапазон чисел в столбике Length и RESULT.
Изходя из столбика X необходимо найти максимальное число из столбика RESULT между двумя X т.е. X соответствует данным из Length.
Предположим по примеру для X=1 X=5 необходимо найти максимальное число из столбика RESULT (равно 2). Потом для X=5 X=9 и т.д.
Я делал при помощи поиска определяя номер строки для X из столбика Length и дальше определив регион для RESULT нахожу максимальное число.
Но, как оказалось, для больших задачь очень медленно работает. Прошу посмотреть пример.
Может есть у кого-то идеи как можно ускорить макрос? Или возможно у меня совершенно все некорректно?
В приложение сам пример и ниже код.
Очень буду благодарен за помощь. Спасибо.
Код |
---|
Function FindMyNumber(Length As Range, X As Range, Out As Integer) Dim SearchRange_a(), i&, row_a&, row_b&, Value_num&, max_range% Value_num = UBound(X.Value) - 1 ReDim FindRow_a(1 To Value_num) ReDim FindRow_b(1 To Value_num) ReDim max_value(1 To Value_num) For i = 1 To Value_num Set FindRow_a(i) = Length.Find(Replace(X(i), ".", "."), LookIn:=xlValues) Set FindRow_b(i) = Length.Find(Replace(X(i + 1), ".", "."), LookIn:=xlValues) max_value(i) = Application.Max(Abs(Application.Max(Sheets("Sheet1").Range("B" & FindRow_a(i).Row, "B" & FindRow_b(i).Row))), _ Abs(Application.Min(Sheets("Sheet1").Range("B" & FindRow_a(i).Row, "B" & FindRow_b(i).Row)))) Next FindMyNumber = max_value(Out) End Function |