Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подсчет всех оставшихся строк в ренже после удаления значений / 6 сообщений из 6, страница 1 из 1
22.08.2019, 21:19
    #39853008
BigB_-_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет всех оставшихся строк в ренже после удаления значений
Добрый вечер!
Не нашел нигде в интернете решение аналогичной задачи
Есть такой ренж:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Range(Cells(2, 3), Cells(Range("C2").CurrentRegion.Rows.Count, 2)).Select
Set f = Selection
'выделил ренж с C2 по последнюю строку и задал выделение как f
Потом у меня цикл, который ищет в выделенном, строки, где нет слова  *батарейка* и удаляет их. 
 For i = 1 To f.Rows.Count
   If f.Rows(i).Find("*батарейка*", , xlValues, xlPart) Is Nothing Then
        f.Rows(i).EntireRow.Delete
        End If
        If i = f.EntireRow.Count Then Exit For
        Next i



Модератор: Учимся использовать тэги оформления кода - FAQ

Но загвоздка в строке For i = 1 To f.Rows.Count. Когда цикл возвращается к этому этапу, например после удаления какой-либо строки, то ренж остается тот же, но появляются пустые строки в конце и их уже насчитывается меньшее количество, соответственно цикл идет не по всему изначальному количеству строк в ренже и цикл прерывается раньше времени.
Существует ли команда, которая подсчитывает все строки в ренже, включая пустые ?
...
Рейтинг: 0 / 0
22.08.2019, 21:21
    #39853010
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет всех оставшихся строк в ренже после удаления значений
Во всех подобных случаях цикл ведут от конца к началу
...
Рейтинг: 0 / 0
22.08.2019, 23:25
    #39853037
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет всех оставшихся строк в ренже после удаления значений
Shocker.ProВо всех подобных случаях цикл ведут от конца к началу

Позволю себе добавить, что бывают ситуации, когда строки для удаления помещаются в массив, а потом удаляются. Но это, когда поиск строк для удаления зависит, в том числе, от удаляемых строк.
...
Рейтинг: 0 / 0
04.09.2019, 09:22
    #39856950
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет всех оставшихся строк в ренже после удаления значений
а обязательно именно построчным удалением? Это ведь небыстро.
Наложить автофильтр по условию "*батарейка*", потом copy-paste отфильтрованного после последней строки таблицы, потом снятие автофильтра и блочное удаление всего от начала таблицы до копипастнутого. Такие "блочные" операции даже на табличках 6-значного объёма в экселе работают очень шустро. И код получается не длиннее, чем сейчас.
...
Рейтинг: 0 / 0
04.09.2019, 09:25
    #39856952
ldfanate
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет всех оставшихся строк в ренже после удаления значений
ну или соответствено: пробили допколонку признака "батарейка/не батарейка", программно отсортировали таблицу по ней, строки к удалению стали рядом, блочно их удалили одним delete. Если нужно восстановить исходный порядок, то формула в допколонке чуть сложнее получается, но непринципиально.
...
Рейтинг: 0 / 0
04.09.2019, 11:56
    #39857055
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет всех оставшихся строк в ренже после удаления значений
Код: vbnet
1.
2.
3.
foreach onecell in Range(Cells(2, 3), Cells(Range("C2").CurrentRegion.Rows.Count, 2))
    If onecell.entirerow.Find("*батарейка*", , xlValues, xlPart) Is Nothing Then onecell.entirerow.delete
next 
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Подсчет всех оставшихся строк в ренже после удаления значений / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]