Страницы: 1
RSS
Обработка дубликатов с консолидацией и удалением строк
 
Добрый день!
В книге, где собираются данные по работе установки во времени есть парные строки с одинаковыми значениями времени и неполными наборами измеряемых данных. Эти строки всегда идут подряд. Данные в них взаимно дополняют друг друга. Нужно получить книгу, где нет дубликатов по времени и данные из дублирующихся строк консолидированы. Написал простой макрос, который это делает.

Вопрос: можно ли это сделать как-то быстрее? В "боевом" файле строк 50 000 . Работа с этим макросом  медленная. Тем более, что таких  файлов может быть много и они очень длинные.
 
Если взять за основу этот макрос
http://excelvba.ru/code/JoinedArray
то всё обработается за пару секунд.
 
Спасибо. Пытаюсь разобраться в вашем коде. За счет чего он работает быстрее?
Вот здесь зачем меняете запятую на точку?
Код
1
2
arr(i, nCol) = Val(Replace(arr(i, nCol), ",", ".")) _
                                           + Val(Replace(arr(j, nCol), ",", "."))
 
точка на запятую меняется перед преобразованием в числа функцией VAL с последующим суммированием

быстрее работает - так как всего 2 обращения к листу (что сильно тормозит) - чтение массива и запись итогового массива
а в вашем макросе выполняется множество обращений к ячейкам листа через cells
значения массива обрабатываются в тысячи раз быстрее, чем ячейки на листе
 
Цитата
Игорь написал:
точка на запятую меняется перед преобразованием в числа функцией VAL с последующим суммированием
Понял. У меня в системе настроена  точка в качестве разделителя дробной части. Поэтому не происходило преобразования в запятые при работе функции val.
Страницы: 1
Читают тему
Наверх
Loading...