|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.04.2010, 18:09 | #11 | |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
Цитата:
2. У меня несколько процедур - для отправки таких строк на сервер и получения ответа, а также других. Все они достаточно тормозят. В в разбираемом случае там идет цикл по диапазону ячеек, так что должна быть закономерность (как видно по файлу), а в другом - сортировка - сначала буква, потом число (B2, B22 и т.п.). Но всё это может в скором времени исчезнуть, если я начну использовать для обработки только изменившиеся ячейки, тогда закономерности не будет, и на нее не стоит полагаться. 3. Лист не полностью пуст (точнее, может быть достаточно заполнен), там будут какие-то значения, которые изменять не надо. Но в данном случае ячейки с вставляемым текстом можно очищать. В общем, прихожу пока что к выводу, что вроде бы не получается сильно ускорить всё. Даже если в конкретном этом случае можно что-то сделать, то у меня похожих процедур много, и в случае большой таблицы они могут все тормозить. Пока что выход (наполовину) в сокращении длины строки - нужно обрабатывать только изменившиеся ячейки. Но в некоторых процедурах все-таки требуется работать со всей таблицей, и там ситуация печальная. |
|
08.04.2010, 18:20 | #12 |
Участник клуба
Регистрация: 28.06.2009
Сообщений: 1,950
|
Ваш вариант у меня работает немного больше 2 минут, что много.
|
08.04.2010, 19:24 | #13 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
|
09.04.2010, 07:12 | #14 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Вариант, предложенный alvazor не плохой, и не "трогает" ячейки, которых нет в обрабатываемой строке. Но так, или иначе, в коде все равно присутствует цикл непосредственного обращения к ячейкам рабочего листа .Range(data(z)) = data(z + 1). Что есть очень медленно. Предлагаю другой вариант (быстрый). Адреса ячеек в текстовой строке могут располагаться произвольно. Макрос определяет максимальные номера используемых строки и столбца. Затем, формирует массив из значений текущего листа в этом диапазоне (одной командой). Дополняет (заменяет) данными, полученными из текстовой строки. Затем, также одной командой помещает значения массива на рабочий лист. Таким образом, обращение к ячейкам листа сведено к минимуму.
Замечание: Если в текстовой строке имеется адрес с любым значением, то это значение будет помещено в указанную ячейку, даже если оно пустое. Если этого делать не нужно, то понадобится добавить проверку значения на пустоту. Посмотрите и проверьте. Что не устраивает?
Чем шире угол зрения, тем он тупее.
|
09.04.2010, 10:25 | #15 |
Форумчанин
Регистрация: 14.02.2009
Сообщений: 753
|
Вообще-то напрашиватся вопрос: какая необходимость записывать поячеечно в текстовой файл?
Тогда уж лучше записать массивом значений. Массивом и вставлять
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru |
09.04.2010, 10:48 | #16 |
Старожил
Регистрация: 05.12.2007
Сообщений: 4,180
|
Ну, это не нам с Вами решать. А потом, даже если будет массив, состоящий не из непрерывного диапазона а различных адресов и данных, то вставить такие данные в рабочий лист не затирая имеющихся выльется в подобную задачу.
Чем шире угол зрения, тем он тупее.
|
09.04.2010, 13:00 | #17 |
Старожил
Регистрация: 12.05.2007
Сообщений: 2,339
|
|
09.04.2010, 14:17 | #18 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
для SAS888
классная задумка, на исходном txt все просто свистело! Но вставит в текстовый файл A1=01 и IV=65536 в лист1 - и приехали... Ошибки в размерностях поправил (в тексте макроса - комментарии), теперь массив формируется без проблем, хотя и чуть дольше, но обратно на лист массив не пишется - run-time error 7 (нет памяти)?? Перед записью на лист вставил проверку первой и последней ячеек, все видно. А вот что далее делать... |
09.04.2010, 14:30 | #19 |
Форумчанин
Регистрация: 02.07.2009
Сообщений: 122
|
ошибся, ячейка A1=01 (первая в txt) и ячейка IV65536=65536 (последняя в txt), т.е. весь диапазон листа в версии 2003
|
09.04.2010, 14:58 | #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 |