![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 | |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]() Цитата:
2. У меня несколько процедур - для отправки таких строк на сервер и получения ответа, а также других. Все они достаточно тормозят. В в разбираемом случае там идет цикл по диапазону ячеек, так что должна быть закономерность (как видно по файлу), а в другом - сортировка - сначала буква, потом число (B2, B22 и т.п.). Но всё это может в скором времени исчезнуть, если я начну использовать для обработки только изменившиеся ячейки, тогда закономерности не будет, и на нее не стоит полагаться. 3. Лист не полностью пуст (точнее, может быть достаточно заполнен), там будут какие-то значения, которые изменять не надо. Но в данном случае ячейки с вставляемым текстом можно очищать. В общем, прихожу пока что к выводу, что вроде бы не получается сильно ускорить всё. Даже если в конкретном этом случае можно что-то сделать, то у меня похожих процедур много, и в случае большой таблицы они могут все тормозить. Пока что выход (наполовину) в сокращении длины строки - нужно обрабатывать только изменившиеся ячейки. Но в некоторых процедурах все-таки требуется работать со всей таблицей, и там ситуация печальная. |
|
![]() |
![]() |
![]() |
#12 | |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#13 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
![]() |
![]() |
![]() |
![]() |
#14 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Вариант, предложенный alvazor не плохой, и не "трогает" ячейки, которых нет в обрабатываемой строке. Но так, или иначе, в коде все равно присутствует цикл непосредственного обращения к ячейкам рабочего листа .Range(data(z)) = data(z + 1). Что есть очень медленно. Предлагаю другой вариант (быстрый). Адреса ячеек в текстовой строке могут располагаться произвольно. Макрос определяет максимальные номера используемых строки и столбца. Затем, формирует массив из значений текущего листа в этом диапазоне (одной командой). Дополняет (заменяет) данными, полученными из текстовой строки. Затем, также одной командой помещает значения массива на рабочий лист. Таким образом, обращение к ячейкам листа сведено к минимуму.
Замечание: Если в текстовой строке имеется адрес с любым значением, то это значение будет помещено в указанную ячейку, даже если оно пустое. Если этого делать не нужно, то понадобится добавить проверку значения на пустоту. Посмотрите и проверьте. Что не устраивает?
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#15 |
Форумчанин
Регистрация: 14.02.2009
Сообщений: 753
|
![]()
Вообще-то напрашиватся вопрос: какая необходимость записывать поячеечно в текстовой файл?
Тогда уж лучше записать массивом значений. Массивом и вставлять |
![]() |
![]() |
![]() |
#16 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
![]()
Ну, это не нам с Вами решать. А потом, даже если будет массив, состоящий не из непрерывного диапазона а различных адресов и данных, то вставить такие данные в рабочий лист не затирая имеющихся выльется в подобную задачу.
Чем шире угол зрения, тем он тупее.
|
![]() |
![]() |
![]() |
#17 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
![]() |
![]() |
![]() |
![]() |
#18 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
![]()
для SAS888
классная задумка, на исходном txt все просто свистело! Но вставит в текстовый файл A1=01 и IV=65536 в лист1 - и приехали... Ошибки в размерностях поправил (в тексте макроса - комментарии), теперь массив формируется без проблем, хотя и чуть дольше, но обратно на лист массив не пишется - run-time error 7 (нет памяти)?? Перед записью на лист вставил проверку первой и последней ячеек, все видно. А вот что далее делать... |
![]() |
![]() |
![]() |
#19 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
![]()
ошибся, ячейка A1=01 (первая в txt) и ячейка IV65536=65536 (последняя в txt), т.е. весь диапазон листа в версии 2003
|
![]() |
![]() |
![]() |
#20 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
![]()
Для любопытствующих
![]() Во вложении - копирование всего диапазона листа1 в массив вариант, внесение в массив значений первой и последней ячеек и обратное занесение в лист. Только терпения наберитесь - один из самых быстрых способов копирования диапазонов потребует несколько минут! Но ошибки по памяти не происходит!? |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задачи: на двумерные массивы,обработку строк,обработку текстовых файлов. (Паскаль) | Yaro | Помощь студентам | 2 | 12.11.2009 12:55 |
Как ускорить попиксельную обработку изображения | Дамир | Общие вопросы .NET | 1 | 02.11.2009 12:40 |
Сравнение текста InStr() | SoFuWa | Microsoft Office Excel | 7 | 22.07.2009 14:38 |
Сравнение Instr(), Строчине и прописные буквы | SoFuWa | Microsoft Office Excel | 2 | 30.05.2009 16:20 |