Вопрос: использование именновах диапазонов | Добавлено: 30.06.06 15:03 |
Автор вопроса: ![]() |
Господа!
Бьюсь пол-дня, и справку читал, и книжку, и инет рыл, понять не могу. В общем, есть диапазон, которому присвоено имя. Как пролистать все ячейки этого диапазона? |
Ответы | Всего ответов: 23 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 0 Ответов: 1876 ![]() |
Профиль | Цитата | #1 | Добавлено: 30.06.06 18:57 |
Точно тем же, достопочтенный, способом, которым вы листаете ячейки диапазонов неименованных! |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 7 Ответов: 188 |
Профиль | Цитата | #2 | Добавлено: 30.06.06 20:41 |
Бьюсь пол-дня, и справку читал, и книжку, и инет рыл, понять не могу. ИМХО: ЧЁ-ТО НЕ ВЕРИТСЯ, ЧТО РЫЛ!!!http://www.firststeps.ru/vba/excel/r.php?66
Хотя по тексту в ссылке Для того, чтобы можно было произвести работу с этой ячейкой ее надо выделить c.Select. Действительно не обязательно применять Select.
|
Номер ответа: 3 Автор ответа: ![]() ![]() ICQ: 234458121 Вопросов: 38 Ответов: 107 |
Профиль | Цитата | #3 | Добавлено: 30.06.06 22:25 |
Простите, Господа!
Видать не там рыл. Сами понимаете: конец недели - пятница - ступор. На самом деле никак не мог разобраться как имя диапазона указывать. Дома все получилось. Надеюсь, на работе тоже получится. Незнайка, ты мне помогаешь уже не первый раз. За это огромный респект, готов напоить тебя пивом. |
Номер ответа: 4 Автор ответа: ![]() ![]() ICQ: 234458121 Вопросов: 38 Ответов: 107 |
Профиль | Цитата | #4 | Добавлено: 03.07.06 13:49 |
Вот какой теперь образовался затор.
Делаю так: Private Sub ButtonForm_Click()
For Each c In Range("Quantity" ![]() MsgBox c Next End Sub Получаю на выходе значения каждой ячейки диапазона "Quantity". А как вытащить адрес этой ячейки? c.Address не катит... |
Номер ответа: 5 Автор ответа: ![]() ![]() ICQ: 234458121 Вопросов: 38 Ответов: 107 |
Профиль | Цитата | #5 | Добавлено: 03.07.06 15:31 |
Сорри, c.Address работает нормально. |
Номер ответа: 6 Автор ответа: ![]() ![]() ICQ: 234458121 Вопросов: 38 Ответов: 107 |
Профиль | Цитата | #6 | Добавлено: 03.07.06 15:46 |
Итого. Я достиг цели. Вдруг кому-то интересно.
На листе есть диапазон ячеек, причем диапазон с разрывами. Необходимо определять какие ячейки это диапазона пусты или содержат ноль и удалять строку, содержащую такую ячейку. Получилось очень компактно. For Each c In Range("Quantity"
![]() If c = 0 Or c = "" Then Range(c.Address).EntireRow.Delete End If Next |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 276 |
Web-сайт: Профиль | Цитата | #7 | Добавлено: 03.07.06 20:38 |
____ Компактно-то компактно, а работать будет быстрее (даже при выключенном экране) если сначала создать ещё один range, состоящий только из тех строк, которые следует удалить и удалить сразу весь range (одной командой). |
Номер ответа: 8 Автор ответа: ![]() ![]() ICQ: 234458121 Вопросов: 38 Ответов: 107 |
Профиль | Цитата | #8 | Добавлено: 04.07.06 15:43 |
А примерчик такого решения можно?
Хотя строк у меня немного: 200-300, работает быстро. |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() Вопросов: 7 Ответов: 188 |
Профиль | Цитата | #9 | Добавлено: 04.07.06 18:31 |
7:
а работать будет быстрее (даже при выключенном экране) При выключенном всегда быстрее ![]() сначала создать ещё один range, состоящий только из тех строк, которые следует удалить и удалить сразу весь range (одной командой). И что произойдет для перекрывающихся дипазонов - писец - все сломалось!!!??? Зачем это нужно!!! Это плохое ограничение!!! Проверять, чтобы строки были уникальными - криво!!!
8: Отключай обновление экрана, отключай пересчет. Удаляй. Но если будут доставать тормоза - лучше подумать о том, чтобы в принципе не удалять пустые строки - наверняка можно обойтись без удаления. Зависит от контекста задачи. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 276 |
Web-сайт: Профиль | Цитата | #10 | Добавлено: 04.07.06 20:38 |
работает быстро /APS/
____ Быстро это как? Менее секунды или более? ____ Прошу прощенья — я несколько был неточен. Я не удалял строки, а скрывал, а потом печатал видимую часть. Однако, думаю, что это почти ничего не меняет. ____ У меня уже года два (или более) сделан в Excel шаблон сметы на материалы и работы. Некоторая часть работ считается на основании информации по служебным столбцам (вне печати). Создана toolbar с двумя кнопками: "Показать", "Скрыть". Скрыть, естественно, надо было те строки, в которых отсутствует сумма. ____Я сделал сначала "в лоб". получил очень долгое мелькание экрана. Потом я убрал обновление экрана и стало всё работать быстрее, но скорость работы сильно напрягала. Скорее всего, происходит процесс обновления всех данных в памяти. И всё это — в моём цикле поиска пустых строк. Вот тогда я и решил не скрывать отдельные строки а формировать из них range, а скрытие сделать ВНЕ цикла. Стало работать так, что не успеваю моргнуть. ____ Два кусочка из текста: ' Анализ стоимости (ячейка H) If .Cells(i, 9).Value = 0 Then 'Стоимость равна 0; ' Формирование объединённого диапазона строк для скрытия If Диапазон Is Nothing Then Set Диапазон = Rows(i) Else Set Диапазон = Union(Диапазон, Rows(i)) End If End If ................. ' Скрытие объединённого диапазона, если он существует If Диапазон Is Nothing Then Else Диапазон.EntireRow.Hidden = True Set Диапазон = Nothing End If ____ Я думаю, что при удалении range, в перекрывающихся диапазонах произойдёт соответствующее обновление, вплоть до Nothing. |
Номер ответа: 11 Автор ответа: ![]() ![]() ICQ: 234458121 Вопросов: 38 Ответов: 107 |
Профиль | Цитата | #11 | Добавлено: 04.07.06 20:49 |
10: не более секунды |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() Вопросов: 7 Ответов: 188 |
Профиль | Цитата | #12 | Добавлено: 04.07.06 22:11 |
10: Я думаю, что при удалении range, в перекрывающихся диапазонах произойдёт соответствующее обновление, вплоть до Nothing. Увы и ах, но будет Error.
11: Ну и нормально. |
Номер ответа: 13 Автор ответа: ![]() ![]() ICQ: 234458121 Вопросов: 38 Ответов: 107 |
Профиль | Цитата | #13 | Добавлено: 05.07.06 10:40 |
10: Все-таки переделал я, как ты сказал. Проблема была не в скорости. При пролистывании диапазона и моментальном удалении скрипт проскакивал следующую ячейку. А так все супер работает.
Спасибо. |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() Вопросов: 5 Ответов: 276 |
Web-сайт: Профиль | Цитата | #14 | Добавлено: 05.07.06 13:18 |
____ "Проскакивание" я проходил. После удаления строки "перенумеровываются" и на это уходит время, а цикл сбивается: на место удалённой строки встаёт следующая и принимает её номер. |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() Вопросов: 7 Ответов: 188 |
Профиль | Цитата | #15 | Добавлено: 05.07.06 14:56 |
и на это уходит время Господа не надо хохлить бабушку - там все индексировано - это ОЧЧЕНЬ мало времени. А при удалении шаг уменьшают на единичку.
|
|