Господа!
Бьюсь пол-дня, и справку читал, и книжку, и инет рыл, понять не могу.
В общем, есть диапазон, которому присвоено имя. Как пролистать все ячейки этого диапазона?
Простите, Господа!
Видать не там рыл. Сами понимаете: конец недели - пятница - ступор.
На самом деле никак не мог разобраться как имя диапазона указывать.
Дома все получилось. Надеюсь, на работе тоже получится.
Незнайка, ты мне помогаешь уже не первый раз. За это огромный респект, готов напоить тебя пивом.
Итого. Я достиг цели. Вдруг кому-то интересно.
На листе есть диапазон ячеек, причем диапазон с разрывами. Необходимо определять какие ячейки это диапазона пусты или содержат ноль и удалять строку, содержащую такую ячейку. Получилось очень компактно.
For Each c In Range("Quantity"
If c = 0 Or c = "" Then
Range(c.Address).EntireRow.Delete
End If
Next
____ Компактно-то компактно, а работать будет быстрее (даже при выключенном экране) если сначала создать ещё один range, состоящий только из тех строк, которые следует удалить и удалить сразу весь range (одной командой).
а работать будет быстрее (даже при выключенном экране)
При выключенном всегда быстрее )
сначала создать ещё один range, состоящий только из тех строк, которые следует удалить и удалить сразу весь range (одной командой).
И что произойдет для перекрывающихся дипазонов - писец - все сломалось!!!??? Зачем это нужно!!! Это плохое ограничение!!! Проверять, чтобы строки были уникальными - криво!!!
8:
Отключай обновление экрана, отключай пересчет. Удаляй. Но если будут доставать тормоза - лучше подумать о том, чтобы в принципе не удалять пустые строки - наверняка можно обойтись без удаления. Зависит от контекста задачи.
____ Прошу прощенья — я несколько был неточен. Я не удалял строки, а скрывал, а потом печатал видимую часть. Однако, думаю, что это почти ничего не меняет.
____ У меня уже года два (или более) сделан в 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.
10: Все-таки переделал я, как ты сказал. Проблема была не в скорости. При пролистывании диапазона и моментальном удалении скрипт проскакивал следующую ячейку. А так все супер работает.
Спасибо.
____ "Проскакивание" я проходил. После удаления строки "перенумеровываются" и на это уходит время, а цикл сбивается: на место удалённой строки встаёт следующая и принимает её номер.