Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2010, 18:09   #11
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
В связи с этим, вопросы автору темы:
1. Какой максимально возможный диапазон рабочего листа может быть использован (макс. № строки и столбца)?
2. Могут ли адреса ячеек в строке следовать не по порядку, либо не подряд? Например:
"...Лист1~B2|11`M123|16`C2|22.. ."
или
"...Лист1~B2|11`E2|16`H2|22..."
Т.е. есть ли какая-либо закономерность в очереди адресов ячеек текстовой строки для каждого листа?
3. Данные из текстовой строки вставляются на пустой лист? Т.е. можно ли очищать уже имеющиеся на листе значения ячеек, отсутствующих в текстовой строке?
1. Вообще говоря, делалось всё так, чтобы ограничений не было, на практике может быть около 700 строк и 35 столбцов, но кто знает, может, нужно будет и это увеличить в несколько раз в обе стороны.
2. У меня несколько процедур - для отправки таких строк на сервер и получения ответа, а также других. Все они достаточно тормозят. В в разбираемом случае там идет цикл по диапазону ячеек, так что должна быть закономерность (как видно по файлу), а в другом - сортировка - сначала буква, потом число (B2, B22 и т.п.).
Но всё это может в скором времени исчезнуть, если я начну использовать для обработки только изменившиеся ячейки, тогда закономерности не будет, и на нее не стоит полагаться.
3. Лист не полностью пуст (точнее, может быть достаточно заполнен), там будут какие-то значения, которые изменять не надо. Но в данном случае ячейки с вставляемым текстом можно очищать.

В общем, прихожу пока что к выводу, что вроде бы не получается сильно ускорить всё. Даже если в конкретном этом случае можно что-то сделать, то у меня похожих процедур много, и в случае большой таблицы они могут все тормозить. Пока что выход (наполовину) в сокращении длины строки - нужно обрабатывать только изменившиеся ячейки. Но в некоторых процедурах все-таки требуется работать со всей таблицей, и там ситуация печальная.
motorway вне форума Ответить с цитированием
Старый 08.04.2010, 18:20   #12
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Цитата:
Сообщение от alvazor Посмотреть сообщение
Да, спецы правы, в таком варианте все тормозит запись на лист!
Несколько изменил макрос - вначале формирую полный массив данных, потом уже запись его на лист, процесс разделил месиджами. Все хорошо видно (заодно и сбои с пустыми данными убрал)
Ваш вариант у меня работает немного больше 2 минут, что много.
motorway вне форума Ответить с цитированием
Старый 08.04.2010, 19:24   #13
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от motorway Посмотреть сообщение
Ваш вариант у меня работает немного больше 2 минут, что много.
У меня работает 3 сек.
valerij вне форума Ответить с цитированием
Старый 09.04.2010, 07:12   #14
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Вариант, предложенный alvazor не плохой, и не "трогает" ячейки, которых нет в обрабатываемой строке. Но так, или иначе, в коде все равно присутствует цикл непосредственного обращения к ячейкам рабочего листа .Range(data(z)) = data(z + 1). Что есть очень медленно. Предлагаю другой вариант (быстрый). Адреса ячеек в текстовой строке могут располагаться произвольно. Макрос определяет максимальные номера используемых строки и столбца. Затем, формирует массив из значений текущего листа в этом диапазоне (одной командой). Дополняет (заменяет) данными, полученными из текстовой строки. Затем, также одной командой помещает значения массива на рабочий лист. Таким образом, обращение к ячейкам листа сведено к минимуму.
Замечание: Если в текстовой строке имеется адрес с любым значением, то это значение будет помещено в указанную ячейку, даже если оно пустое. Если этого делать не нужно, то понадобится добавить проверку значения на пустоту.
Посмотрите и проверьте. Что не устраивает?
Вложения
Тип файла: rar Еще ускорить.rar (9.5 Кб, 14 просмотров)
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.04.2010, 10:25   #15
alex77755
Форумчанин
 
Аватар для alex77755
 
Регистрация: 14.02.2009
Сообщений: 753
По умолчанию

Вообще-то напрашиватся вопрос: какая необходимость записывать поячеечно в текстовой файл?
Тогда уж лучше записать массивом значений. Массивом и вставлять
помогу решить контрольные VB6, VBA (недорого)
Alex77755@mail.ru
alex77755 вне форума Ответить с цитированием
Старый 09.04.2010, 10:48   #16
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Сообщение от alex77755 Посмотреть сообщение
Вообще-то напрашиватся вопрос: какая необходимость записывать поячеечно в текстовой файл?
Тогда уж лучше записать массивом значений. Массивом и вставлять
Ну, это не нам с Вами решать. А потом, даже если будет массив, состоящий не из непрерывного диапазона а различных адресов и данных, то вставить такие данные в рабочий лист не затирая имеющихся выльется в подобную задачу.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 09.04.2010, 13:00   #17
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
Посмотрите и проверьте.
Да, ваще мгновенно работает, !!!!!!!!!!!!!!
valerij вне форума Ответить с цитированием
Старый 09.04.2010, 14:17   #18
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

для SAS888
классная задумка, на исходном txt все просто свистело!
Но вставит в текстовый файл A1=01 и IV=65536 в лист1 - и приехали...
Ошибки в размерностях поправил (в тексте макроса - комментарии), теперь массив формируется без проблем, хотя и чуть дольше, но обратно на лист массив не пишется - run-time error 7 (нет памяти)??
Перед записью на лист вставил проверку первой и последней ячеек, все видно. А вот что далее делать...
Вложения
Тип файла: rar ERR_ускорить.rar (1.1 Кб, 6 просмотров)
alvazor вне форума Ответить с цитированием
Старый 09.04.2010, 14:30   #19
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

ошибся, ячейка A1=01 (первая в txt) и ячейка IV65536=65536 (последняя в txt), т.е. весь диапазон листа в версии 2003
alvazor вне форума Ответить с цитированием
Старый 09.04.2010, 14:58   #20
alvazor
Форумчанин
 
Регистрация: 02.07.2009
Сообщений: 122
По умолчанию

Для любопытствующих
Во вложении - копирование всего диапазона листа1 в массив вариант, внесение в массив значений первой и последней ячеек и обратное занесение в лист.
Только терпения наберитесь - один из самых быстрых способов копирования диапазонов потребует несколько минут! Но ошибки по памяти не происходит!?
Вложения
Тип файла: rar Массив вариант.rar (6.8 Кб, 5 просмотров)
alvazor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задачи: на двумерные массивы,обработку строк,обработку текстовых файлов. (Паскаль) 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