Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите сделать код эффективнее / 11 сообщений из 11, страница 1 из 1
19.02.2019, 13:10
    #39776138
ceres
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
Приложу файл.

Данные берутся из пополняемой таблички Fact: Дата, ФИО, буква.
Заполняется таблица Tabl: строки - ФИО; столбцы - месяц/буква.
Сейчас делаю так: для каждой ячейки из Tabl создаю строковую переменную: месяц+ФИО+буква, и сравниваю ее со всем списком из Fact. Если совпало, то cell = cell+1

Вроде просто, но пока занимает 10 секунд. Но список из 120 записей. К концу года будет 2000. Долго будет.
Есть варианты ускориться?
...
Рейтинг: 0 / 0
19.02.2019, 13:11
    #39776140
ceres
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
Вот файл
...
Рейтинг: 0 / 0
19.02.2019, 13:42
    #39776156
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
Самая длинная операция - это обращение к ячейке листа, у вас из много в циклах.

Так что в какой-то степени поможет - считать все необходимые данные в память (в массив - в один прием), обработать в памяти, записать только изменившиеся ячейки, если возможно, то тоже массивом - в один прием.

Ну а по большому счету, такие программы делаются с применением СУБД, а расчеты - с помощью SQL-запросов, там это будет занимать десятки миллисекунд.
...
Рейтинг: 0 / 0
19.02.2019, 15:06
    #39776207
ceres
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
Shocker.ProСамая длинная операция - это обращение к ячейке листа, у вас из много в циклах.

Так что в какой-то степени поможет - считать все необходимые данные в память (в массив - в один прием), обработать в памяти, записать только изменившиеся ячейки, если возможно, то тоже массивом - в один прием.
Спасибо! ОК. Попробую что-нибудь почитать в этом направлении.


Ну а по большому счету, такие программы делаются с применением СУБД, а расчеты - с помощью SQL-запросов, там это будет занимать десятки миллисекунд.
Это да. Но я не для себя стараюсь. А попробуйте "пересадить" народ на Access, ага ))
...
Рейтинг: 0 / 0
19.02.2019, 17:05
    #39776321
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
ceres,
в табл. Fact 117 строк, а сумма итогового столбца в Tabl - 115. Причина в том, что Степанова и Мустафина отсутствуют в табл. Doctor. Это нормальная ситуация, или макрос должен сообщить об этом или сам внести недостающие фамилии в Doctor?
...
Рейтинг: 0 / 0
19.02.2019, 17:27
    #39776340
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
И почти то же самое можно получить в несколько кликов мыши, построив Сводную таблицу, см. файл.
...
Рейтинг: 0 / 0
19.02.2019, 18:29
    #39776388
ceres
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
Казанскийceres,
в табл. Fact 117 строк, а сумма итогового столбца в Tabl - 115. Причина в том, что Степанова и Мустафина отсутствуют в табл. Doctor. Это нормальная ситуация, или макрос должен сообщить об этом или сам внести недостающие фамилии в Doctor?

это нормальная ситуация. Можно не сообщать и не добавлять.
...
Рейтинг: 0 / 0
19.02.2019, 18:36
    #39776395
ceres
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
КазанскийИ почти то же самое можно получить в несколько кликов мыши, построив Сводную таблицу, см. файл.

Как-то сводные таблицы мимо меня прошли )).
Не умею. Пока через VBA проще доходит. Но разберусь на будущее.
Спасибо!!
...
Рейтинг: 0 / 0
19.02.2019, 18:38
    #39776399
ceres
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
Shocker.Pro
Так что в какой-то степени поможет - считать все необходимые данные в память (в массив - в один прием), обработать в памяти, записать только изменившиеся ячейки, если возможно, то тоже массивом - в один прием.



Сделал!
Получилось 3 секунды!!!
...
Рейтинг: 0 / 0
19.02.2019, 19:58
    #39776436
ceres
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
Кстати, заметил небольшое неудобство. При переносе в массив, берутся данные, а не формулы, ну ничего - можно перезаполнить.
...
Рейтинг: 0 / 0
19.02.2019, 23:32
    #39776497
Казанский
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите сделать код эффективнее
Кроме свойства по умолчанию .Value, у диапазона есть свойство .Formula.
А также Value2, FormulaR1C1,FormulaLocal, FormulaR1C1Local, FormulaArray
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Помогите сделать код эффективнее / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]