Формулы очень сложные (Excel)

Программирование на Visual Basic for Applications
pshik
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 23.07.2005 (Сб) 18:57

Формулы очень сложные (Excel)

Сообщение pshik » 10.01.2006 (Вт) 21:07

У меня проблема
Формулы очень сложные
На листе 7000 записей и как результат 15-20 минут вычисления
Можно ли как-то ускорить этот процесс?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 11.01.2006 (Ср) 3:22

Наверное пересчёты излишние.
Попробуй поставить вычисление вручную и считать по запросу.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

pshik
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 23.07.2005 (Сб) 18:57

Сообщение pshik » 11.01.2006 (Ср) 20:07

Вот такие формулы.

IF(ISERROR(IF(INDEX(TACCRAFT,MATCH(B3&J3,TACDATE&TACID,0))=K3,'OK',INDEX(TACCRAFT,MATCH(B3&J3,TACDATE&TACID,0)))),'NO DATA',IF(INDEX(TACCRAFT,MATCH(B3&J3,TACDATE&TACID,0))=K3,'OK',INDEX(TACCRAFT,MATCH(B3&J3,TACDATE&TACID,0))))


SUM((TACID=J3)*(TACDATE=B3)*(TACPAYCODE=H3)*TACREG)+SUM((TACID=J3)*(TACDATE=B3)*(TACPAYCODE=H3)*TACOT)

Т.е остаётся только оптимизировать формулы?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 11.01.2006 (Ср) 20:28

Да.
Промежуточные вычисления производить в невидимых ячейках и использовать их результаты.
Lasciate ogni speranza, voi ch'entrate.

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 14.01.2006 (Сб) 15:04

Запихай всю свою сложную формулу в пользовательскую функцию.
Работать будет намного быстрее.
Для этого:
1. идем в Сервис/Макросы/Редактор ВБ
2. создаем модуль. лучше общий модуль, чтобы на всю книгу был доступ.
3. в нем определяем твою функцию как public
4. пишем тело функции
Код: Выделить всё
Public Function Name_of_function (<список аргументов>) as String 'или требуемый тебе тип
   ...
   <тут производишь вычисления>
   ...

   ' возврат вычесленного значения или значение по условию
   Name_of_function = <вычесленное значение>
     
End Function

5. закрываем редактор.

Теперь у тебя твоя новая функция будет доступна как и все встроеные функции: Список функций/Другие функции/Определенные пользователем.
Точно как и с ними можно будет указывать произвольные ячейки и т.д.
Но быстродействие будет выше. Кроме того таким образом обходится ограничение на число уровней вложенности (стандартно - 7 уровней)
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 14.01.2006 (Сб) 15:29

Кстати, можно вразумительно описать набор данных (типы, что означают) и что с ним происходит?
А то попробовал в твоей 1-ой формуле разобраться и завяз. В глазах рябит, такая длинная.
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.

pshik
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 23.07.2005 (Сб) 18:57

Сообщение pshik » 16.01.2006 (Пн) 19:41

hohol_kz писал(а):Кстати, можно вразумительно описать набор данных (типы, что означают) и что с ним происходит?
А то попробовал в твоей 1-ой формуле разобраться и завяз. В глазах рябит, такая длинная.


INDEX(TACCRAFT,MATCH(B3&J3,TACDATE&TACID,0)
это основная часть
MATCH -берёт два поля B3&J3
и ищет соответствие в этих Range TACDATE&TACID
если находит,то возврашает из TACCRAFT range значение кода
остальное обработка ошибок и сравнение с сушествующим TACCRAFT кодом

pshik
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 23.07.2005 (Сб) 18:57

Сообщение pshik » 16.01.2006 (Пн) 19:42

Но быстродействие будет выше. Кроме того таким образом обходится ограничение на число уровней вложенности (стандартно - 7 уровней)
------------
интересно
а почему быстрее?
вычисления же будут теже

hohol_kz
Обычный пользователь
Обычный пользователь
 
Сообщения: 90
Зарегистрирован: 05.08.2005 (Пт) 6:21

Сообщение hohol_kz » 17.01.2006 (Вт) 14:37

А вот поди же...
Делал сложный и громоздкий лист. Когда извращался с кучей вложенных функций то вычислялся дольше чем потом, когда написал собственную функцию-аналог.
На правах саморекламмы: "Кофейник" - это тот же "чайник", только круче.


Вернуться в VBA

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 84

    TopList  
cron