Max. Скорость: как достичь?

Программирование на Visual Basic for Applications
malinos
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 16.05.2005 (Пн) 16:54
Откуда: Moscow

Max. Скорость: как достичь?

Сообщение malinos » 17.06.2005 (Пт) 11:40

Коллеги,
подскажите пожалуйста как выполнить следующую задачу с масимальной скоростью(!):

В Excel 25000 строк и 4 столбца - в столбцах данные - это 100%
дано разбиение: 23%, 25%, 30%, 22%.

Надо разбить на 4 части.

т.е. есть
header data1 data2 data3 data4
name1
name2
name3

надо получить:
header data1 data2 data3 data4 | (data1 data2 data3 data4)*23% и т.д.
name1
name2
name3

Я это делаю циклом перебираю подряд каждую ячейку(и это занимает 25 минут). Это самое медленное. Как достичь максимальной скорости? Если умножать целиком группы столбцов - скорость увеличится?

Заранее спасибо.
malinos

Sedge
Alternative Choice
Alternative Choice
Аватара пользователя
 
Сообщения: 1049
Зарегистрирован: 16.05.2002 (Чт) 18:23
Откуда: Somewhere-In-The-Net

Сообщение Sedge » 17.06.2005 (Пт) 12:48

Экспортировать всю структуру в Access, а далее - SQL запросом...
Или Excel критичен?

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 17.06.2005 (Пт) 12:53

А если просто формулой?
А ее на Range применить (если надо)?

malinos
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 16.05.2005 (Пн) 16:54
Откуда: Moscow

Сообщение malinos » 17.06.2005 (Пт) 12:54

Нет, не критичен. Я что-то забыл про Access.
А все таки в Excel какой алгоритм будет макс. быстродействующим?
malinos

malinos
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 16.05.2005 (Пн) 16:54
Откуда: Moscow

Сообщение malinos » 17.06.2005 (Пт) 12:58

Snussi, это самый быстрый алгоритм?
malinos

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 17.06.2005 (Пт) 13:37

Имхо, это самый безгиморный из быстрых.
Еще проще - создал формулу и прямо на листе ее растянул - даже VBA не надо!

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 17.06.2005 (Пт) 15:36

Нет, не критичен. Я что-то забыл про Access.
А все таки в Excel какой алгоритм будет макс. быстродействующим?

Если ты используешь цикл For или другой цикл с неописанной переменой, то он работает куда дольше. Опиши переменнуюцикла типом Long, заработает гораздо быстее!

malinos
Начинающий
Начинающий
 
Сообщения: 9
Зарегистрирован: 16.05.2005 (Пн) 16:54
Откуда: Moscow

Сообщение malinos » 17.06.2005 (Пт) 17:00

Vitaly1 писал(а):
Нет, не критичен. Я что-то забыл про Access.
А все таки в Excel какой алгоритм будет макс. быстродействующим?

Если ты используешь цикл For или другой цикл с неописанной переменой, то он работает куда дольше. Опиши переменнуюцикла типом Long, заработает гораздо быстее!


Работает вместо 32 минут - 2 минуты. Пожалуйста, объясни, почему!
malinos

uhm
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1597
Зарегистрирован: 02.12.2004 (Чт) 15:21

Сообщение uhm » 17.06.2005 (Пт) 17:08

Потому что если ты переменную явно не объявил, она у тебя имеет тип Variant. А работа с Variant происходит очень-очень медленно.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 18.06.2005 (Сб) 10:17

Потому что если ты переменную явно не объявил, она у тебя имеет тип Variant. А работа с Variant происходит очень-очень медленно.

Тут нету ответа на вопрос. :D А ответ таков: Не тратится время на преобразование в числовой тип перед вычисление и после, а так же перед сравнением значения переменной в заголовке цикла. :P

Snussi
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 151
Зарегистрирован: 21.07.2004 (Ср) 18:08
Откуда: Москва, Россия

Сообщение Snussi » 20.06.2005 (Пн) 8:56

Вообще, насколько я знаю, любая книга по программированию на VB начинается с рекомендации включить Option Explicit и явно объявлять переменные, причем, по возможности, не Variant'ом

Ig
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 30.04.2005 (Сб) 12:37
Откуда: Far East

Сообщение Ig » 24.06.2005 (Пт) 5:51

Есть ишшо вариант:
Запихни диапазон с данными с листа в массив и работай с ним. А уж потом, резалт выводи на лист.
"Нормальные герои всегда идут в обход..."


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 1

    TopList