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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2011, 20:42   #1
SVGuss
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 55
По умолчанию удалить строку если значение в ячейке равно Х

Это можно сделать? Скажем, есть табличка
.| А. B. C
1| 3 5 67
2| 5 5 0
3| 3 5 3

Если значение в какой-нибудь ячейке столбца С равно, например, нулю, то автоматически удаляется соответствующая строка целиком, в данном случае, строка 2.
SVGuss вне форума Ответить с цитированием
Старый 02.04.2011, 21:06   #2
VictorM
Старожил
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Сообщений: 2,058
По умолчанию

Посмотрите вот это Удаление всех пустых строк в таблице
Можно указать свое условие на удаление строки.
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума Ответить с цитированием
Старый 02.04.2011, 21:15   #3
SVGuss
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 55
По умолчанию

Цитата:
Сообщение от VictorM Посмотреть сообщение
Посмотрите вот это Удаление всех пустых строк в таблице
Можно указать свое условие на удаление строки.
Спасибо!!!
SVGuss вне форума Ответить с цитированием
Старый 02.04.2011, 23:34   #4
R Dmitry
Форумчанин
 
Регистрация: 07.03.2010
Сообщений: 796
По умолчанию

Рецепт от ZVI
http://www.planetaexcel.ru/forum.php?thread_id=26246
Логика?!.... она где то рядом... E_mail: dg_rusak@mail.ru Если спасибо мало: Яндекс . Деньги - 41001731366021 WM R269866874234
R Dmitry вне форума Ответить с цитированием
Старый 02.04.2011, 23:38   #5
SVGuss
Пользователь
 
Регистрация: 11.09.2010
Сообщений: 55
По умолчанию

Цитата:
Сообщение от R Dmitry Посмотреть сообщение
Спасибо, попробую и это
SVGuss вне форума Ответить с цитированием
Старый 03.04.2011, 06:58   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

В подобных случаях, когда нужно удалить (оставить) строки с конкретным значением в столбце, вовсе не обязательно использовать перебор ячеек этого столбца. Все предложенные примеры именно так и делают.
Для решения данной задачи, можно обойтись вообще без циклов. Например, удалить строки, в столбце "C" которых значение равно "3", можно так:
Код:
Sub Main()
    Dim x As Range: Application.ScreenUpdating = False
    Set x = [C:C].Find(3, , , xlWhole)
    If Not x Is Nothing Then
        [C:C].ColumnDifferences(x).EntireRow.Hidden = True
        ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete
        Rows.Hidden = False
    End If
End Sub
Другой вариант - использовать автофильтр в столбце по требуемому значению, удалить видимые строки, затем отменить автофильтр.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 16.01.2014, 17:33   #7
drew_f
Новичок
Джуниор
 
Регистрация: 16.01.2014
Сообщений: 2
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
В подобных случаях, когда нужно удалить (оставить) строки с конкретным значением в столбце, вовсе не обязательно использовать перебор ячеек этого столбца. Все предложенные примеры именно так и делают.
Для решения данной задачи, можно обойтись вообще без циклов. Например, удалить строки, в столбце "C" которых значение равно "3", можно так:
Код:
Sub Main()
    Dim x As Range: Application.ScreenUpdating = False
    Set x = [C:C].Find(3, , , xlWhole)
    If Not x Is Nothing Then
        [C:C].ColumnDifferences(x).EntireRow.Hidden = True
        ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible).EntireRow.Delete
        Rows.Hidden = False
    End If
End Sub
Другой вариант - использовать автофильтр в столбце по требуемому значению, удалить видимые строки, затем отменить автофильтр.
SAS888, а не подскажете следующее: в Вашем примере удаляются строки, где в столбце С имеется значение 3, а в моем случае эта "тройка" является результатом вычислений по формуле и при запуске макроса строки не удаляются. Как подправить код, чтобы все заработало?
drew_f вне форума Ответить с цитированием
Старый 17.01.2014, 06:32   #8
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
...в моем случае эта "тройка" является результатом вычислений по формуле и при запуске макроса строки не удаляются.
Если метод Find можно "заставить" искать значения, полученные в результате вычислений формул (опция LookIn), то метод ColumnDifferences для этой задачи неприемлем.
Поэтому, можно воспользоваться вторым предложенным способом (используя автофильтр). Например, так:
Код:
Sub DelRows1()
    Dim x As Range: Application.ScreenUpdating = False
    Set x = Intersect(ActiveSheet.UsedRange, [C:C])
    [C:C].AutoFilter Field:=1, Criteria1:="3"
    x.Offset(1).Resize(x.Rows.Count).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    [C:C].AutoFilter
End Sub
Также, можно применить следующий вариант:
Код:
Sub DelRows2()
    Dim x As Range, y As Range, fst As String
    Set x = [C:C].Find(3, , xlValues, xlWhole)
    If Not x Is Nothing Then
        fst = x.Address
        Do
            If y Is Nothing Then Set y = x Else Set y = Union(y, x)
            Set x = [C:C].FindNext(x)
        Loop While fst <> x.Address
        y.EntireRow.Delete
    End If
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 21.01.2014, 13:00   #9
drew_f
Новичок
Джуниор
 
Регистрация: 16.01.2014
Сообщений: 2
По умолчанию

Спасибо огромное!

(Напрасно я дуру валял на уроках информатики в школе, глупых бы вопросов теперь не задавал...)
drew_f вне форума Ответить с цитированием
Старый 28.09.2017, 04:46   #10
Alexbr-vl
Новичок
Джуниор
 
Регистрация: 28.09.2017
Сообщений: 2
По умолчанию

Уважаемые , добрый день!
ничего не смыслю в VBA. Помогите решить задачу. Макрос предложенный в этой теме:

Sub DelRows1()
Dim x As Range: Application.ScreenUpdating = False
Set x = Intersect(ActiveSheet.UsedRange, [C:C])
[C:C].AutoFilter Field:=1, Criteria1:="3"
x.Offset(1).Resize(x.Rows.Count).Sp ecialCells(xlCellTypeVisible).Entir eRow.Delete
[C:C].AutoFilter
End Sub

идеально подходит для решения моей задачи, он привязан у меня к кнопке, но как сделать чтоб он применялся к определенным листам в книге, к нескольким листам.
Alexbr-vl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как удалить строку из combobox, если такая уже есть и добавить в начало новую? codermoder Общие вопросы Delphi 6 14.01.2011 17:33
Если равно, то пустое иначе значение kzld Microsoft Office Excel 4 15.12.2010 10:21
Залить цветом диапазон (строку таблицы), если в последней ее ячейке есть текст MasterLee Microsoft Office Excel 5 08.12.2010 09:47
VBA_макрос: удалить всю строку в таблице, если в ней есть слово "удалить" макарошка Microsoft Office Excel 15 05.10.2010 09:09
Сравнение значений в ячейках и вывод соообщения если не равно. Siver Microsoft Office Excel 2 18.12.2008 04:42