Страницы: 1
RSS
Что лучше для ускорения обработки БАЗЫ.
 

Добрый день всем.

Что лучше сделать или как должно быть?

Есть база, но я пока еще только учусь и строго не судите.

Есть формулы, которые работают по многим критериям у меня они получились слишком массивные (тяжёлые). Как можно их укоротить чтобы при обработке не зависал процесс вычисления и комп не тормозил по 10 минут, а то и более?

Сам файл урезан (удалил около 7000 строк) так как он весит 60мб., заполняются по мере поступления информации.

Предложите, пожалуйста, свои вариант как это лучше сделать. Можно через макрос чтобы на автомате заполнял с библиотеки если видит что-то в ячейки. Может через диспетчер имён создав какую-то библиотеку чтобы оттуда черпало информацию, или укоротит формулу для ускорения процесса обработки.

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

Надеюсь, что правильно выразил мысли.

Спасибо заранее всем!

 
формулы хороши для составления отчетов
и, практически, не применимы в данных
пока у вас данных 2000 строк - все летает
станет 20 или 200 тыс.строк. - все умрет,
любая оптимизация формул приведет к тормозам при критическом увеличении количества данных
если в данных никак не обойтись без вычисляемых полей, эти вычисления должны быть переложены на макросы: изменилось влияющее значение - пересчитались вычисляемые поля и никаких формул в данных. не совмещайте в одной таблице и данные, и отчет, разделите их на разные листы
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал: не совмещайте в одной таблице и данные, и отчет, разделите их на разные листы
Ещё можно их разнести на разные книги, как вариант.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Ігор Гончаренко,

Да, вы правы. С этой базы собираются потом акты, спецификации и тд.
Конечно формулы получились крутоваты если брать вкладку как пример R2 или S2 слишком длинные формулы получились.

Вот и думаю как быть. С формулами более мене дружу а вот макрос пока для меня новое и я только его изучаю.

Я думаю что нужен какой-то простои и гибкий макрос который можно прикрутить к любой колонки для заполнения строк.
Для облегчения макроса, я думаю можно создать какую-то базу или библиотеку, чтобы макрос оттуда черпал информацию (наименования, описания, комментарий и т.д) как пример.

Не поможете, пожалуйста, с макросом? Может у вас есть что-то похожее?
Изменено: Олег м - 14.09.2022 11:36:50
 
Цитата
написал:
нужен какой-то простои и гибкий макрос который можно прикрутить к любой колонки
макрос как и формула решает какую-то определенную задачу а не все задачи в мире
и для формулы и для макроса нужно описание задачи полное и по возможности лаконичное
если вам нужен просто макрос - выберите любой на форуме, их тут тысячи
если нужен макрос, который решает вашу задачу - для начала опишите ее
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
То, что находится на листе База - это, не сути, не база данных, а некий уже готовый отчёт из разных баз, которые ещё можно как-то назвать "базами" и которые находятся на других листах, хотя пёстрая раскраска в них уже не даёт основания считать так. По-моему, если будет реальная БАЗА, то лучше использовать другие варианты (Access, SQL-Server и т.п.), а Excel использовать только для отчётов. Если всё-таки хочется (приходится) использовать только Excel, то для начала лучше почитать Создание базы данных в Excel. Там для хранения данных используются умные таблицы без формул, макросы для формы ввода и сводные для отчётов.
Не ясно из описания, данные вносятся одним пользователем или несколькими. Если второе, то тут однозначно для внесения и хранения данных надо стараться уходить от Excel, т.к. в Excel не совсем удачно сделана схема общего доступа. В простейшем варианте можно воспользоваться старыми добрыми dbf для хранения, а в Excel сделать только формы для внесения данных и отчёты. Если совсем всё завязано на Excel, то и без dbf можно обойтись и хранить всё в xls-файле, но только в отдельных файлах или на отдельных скрытых листах.
Изменено: tolikt - 14.09.2022 12:35:55
 
Как любитель встроенных средств естественно проверил расширенный фильтр.
1. Очень стандартный метод предложенный Игорем.
так как нужно вывести фразы которые не содержат слова из списка, то нужно использовать AND а это означает что массив критериев развернуть пришлось
Данные   Данные        Данные
<>*спб*  <>*бесплатно* <>*бумаг*

и несмотря на ожидания этот вариант показал не лучший вариант. 801,5195 по таймеру
2. С формулой.
для критерия использована формула.
=ISERROR(LOOKUP(2;1/FIND('Стоп-слова'!A$2:A$2098;A2)))
Многие скажут что сложновато, но как не странно она быстрее всех что придумал с учетом того что массивную применять просто так нельзя.
111,6133
Код
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
t = Timer
    Range("Таблица1[[#All],[Данные]]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Range("d1:d2"), CopyToRange:=Range("K1"), Unique _
        :=False
    DoEvents
Debug.Print Timer - t
Range("f1") = Timer - t
t = Timer
'    Range("Таблица1[[#All],[Данные]]").AdvancedFilter Action:=xlFilterCopy, _
'        CriteriaRange:=Worksheets("Стоп-слова").Range("d1:d2098"), CopyToRange:=Range("L1"), Unique _
'        :=False
    Range("Таблица1[[#All],[Данные]]").AdvancedFilter Action:=xlFilterCopy, _
        CriteriaRange:=Worksheets("Стоп-слова").Range("F1:CBV2"), CopyToRange:=Range("M1"), Unique _
        :=False
    DoEvents
Debug.Print Timer - t
Range("G1") = Timer - t
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

И там и там не стал заниматься подготовкой данных для критерия, думаю на фоне этих замеров тем можно принебрегать.
Дальнейшие улучшения вряд ли серьезно изменят результат.
По вопросам из тем форума, личку не читаю.
 
БМВ,
Добрый день.
А можно пример в excel?
 
Похоже, БМВ уже вообще не в ту степь...  :D  
 
tolikt, просто темой ошибся)
Забанить бы его за писанину не по теме  :D
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
БМВ, плиз, перенеси свой пост #7 вот в эту тему
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=1&TID=152076
Изменено: New - 14.09.2022 16:48:57
Страницы: 1
Наверх