Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2010, 13:13   #11
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Там выше я мерил скорость 5800х5400 значений.
Теперь померил 5800х10 значений - результат противоположный, массивы в 5 раз быстрее:
0.171875
0.171875
0.03125
0.03125
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 27.10.2010, 13:48   #12
sn00p
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Там выше я мерил скорость 5800х5400 значений.
Теперь померил 5800х10 значений - результат противоположный, массивы в 5 раз быстрее:
0.171875
0.171875
0.03125
0.03125
какието чудеса у вас быстродействия)
\у меня код вот какой

Код:
sekkk = ActiveWorkbook.Worksheets("list1").Range("a1:k17784")
sekkk2 = ActiveWorkbook.Worksheets("list2").Range("b1:c12678")

For i = 2 To UBound(sekkk, 1)
For ii = 1 To UBound(sekkk2, 1)

    If sekkk(i, 2) = sekkk2(ii, 1) Then sekkk(i, 6) = sekkk2(ii, 2): Exit For
Next ii, i
ActiveWorkbook.Worksheets("list1").Range("a1").Resize(UBound(sekkk, 1), UBound(sekkk, 2)).Value = sekkk
порядка 15-20 секунд крутит
или это у меня не массивы??

хотя все равно быстрее чем vplookup или find в разыыыы

Последний раз редактировалось sn00p; 27.10.2010 в 13:51.
sn00p вне форума Ответить с цитированием
Старый 27.10.2010, 13:57   #13
sn00p
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 40
По умолчанию

Код:
sekkk = ActiveWorkbook.Worksheets("ñëè÷èòåëüíàÿ").Range("a1:k" & nLastrow2).Value
sekkk2 = ActiveWorkbook.Worksheets("êîëSAP").Range("b1:c" & nLastrow).Value

For i = 2 To UBound(sekkk, 1)
For ii = 1 To UBound(sekkk2, 1)
    If sekkk(i, 2) = sekkk2(ii, 1) Then sekkk(i, 6) = sekkk2(ii, 2): Exit For
Next ii, i
ActiveWorkbook.Worksheets("ñëè÷èòåëüíàÿ").Range("a1").Resize(UBound(sekkk, 1), UBound(sekkk, 2)).Value = sekkk
в 2 раза быстрее делает)) порядка 8 секунд
sn00p вне форума Ответить с цитированием
Старый 27.10.2010, 14:46   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Не знаю... Вот на чистом листе гонял:
Код:
Sub tt()
tm = Timer
sekkk = ActiveWorkbook.Worksheets(1).Range("a1:k17784")
sekkk2 = ActiveWorkbook.Worksheets(2).Range("b1:c12678")

For i = 2 To UBound(sekkk, 1)
For ii = 1 To UBound(sekkk2, 1)

    If sekkk(i, 2) = sekkk2(ii, 1) Then sekkk(i, 6) = sekkk2(ii, 2): Exit For
Next ii, i
ActiveWorkbook.Worksheets(1).Range("a1").Resize(UBound(sekkk, 1), UBound(sekkk, 2)).Value = sekkk
Debug.Print Timer - tm
End Sub
Время в секундах
0.171875
0.171875
0.171875

Хотя да, на чистом листе сразу выходит из цикла...
С заполненным sekkk(i, 2) оба цикла полностью пробежал за 99 секунд.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 27.10.2010 в 14:52.
Hugo121 вне форума Ответить с цитированием
Старый 28.10.2010, 06:01   #15
sn00p
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 40
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Не знаю... Вот на чистом листе гонял:
Код:
Sub tt()
tm = Timer
sekkk = ActiveWorkbook.Worksheets(1).Range("a1:k17784")
sekkk2 = ActiveWorkbook.Worksheets(2).Range("b1:c12678")

For i = 2 To UBound(sekkk, 1)
For ii = 1 To UBound(sekkk2, 1)

    If sekkk(i, 2) = sekkk2(ii, 1) Then sekkk(i, 6) = sekkk2(ii, 2): Exit For
Next ii, i
ActiveWorkbook.Worksheets(1).Range("a1").Resize(UBound(sekkk, 1), UBound(sekkk, 2)).Value = sekkk
Debug.Print Timer - tm
End Sub
Время в секундах
0.171875
0.171875
0.171875

Хотя да, на чистом листе сразу выходит из цикла...
С заполненным sekkk(i, 2) оба цикла полностью пробежал за 99 секунд.
итого)
практически все можно реализовать ч\з перебор в массиве))
в топку все внутренние ф-ии = они тормозные!
sn00p вне форума Ответить с цитированием
Старый 28.10.2010, 09:20   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
практически все можно реализовать ч\з перебор в массиве))
в топку все внутренние ф-ии = они тормозные!
Не горячитесь. ИМХО это не совсем так.
В VBA есть функции и методы, которых просто-напросто нет в VB. Например, для работы со свойствами ячеек, диапазонами и т.п.
А попробуйте, например, состязаться с Excel-ем в скорости сортировки таблицы, расположенной на рабочем листе, в которой много столбцов...
Могу привести еще много примеров. Т.е. к решению конкретной задачи нужно подходить индивидуально!
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cant Find mistake dikabraz Паскаль, Turbo Pascal, PascalABC.NET 10 19.10.2010 20:17
метод find kate158 Общие вопросы Delphi 4 15.12.2009 16:09
Find WebBrowser Edward Работа с сетью в Delphi 2 04.09.2009 20:03
Макрос, расширяющий функцию Find neugadal Microsoft Office Word 5 29.09.2008 08:32