В этом руководстве будет показано, как удалять или вставлять строки на основе значений ячеек.
Удалить строку на основе значения ячейки
Это будет циклически перебирать диапазон и удалять строки, если в столбце A указано «удалить».
1234567891011121314151617181920 | Sub DeleteRowsBasedonCellValue ()'Объявить переменныеУменьшить размер LastRow, равный длине, FirstRow, равной длинеТусклый ряд по всей длинеС ActiveSheet'Определить первую и последнюю строкиFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Проходить по строкам (снизу вверх)For Row = LastRow To FirstRow Step -1Если .Range ("A" & Row) .Value = "delete", то.Range ("A" и строка) .EntireRow.DeleteКонец, еслиСледующая строкаКонец сКонец подписки |
Мы должны начинать цикл с нижней строки, потому что удаление строки приведет к смещению данных, пропуская строки, если вы зациклите сверху вниз.
Также обратите внимание, что вместо того, чтобы вручную вводить последнюю строку, мы вычисляем последнюю использованную строку.
Удалить строку - на основе фильтра
В предыдущем примере мы перебирали строки в цикле, удаляя каждую строку, соответствующую критериям. В качестве альтернативы мы можем использовать автофильтр Excel для фильтрации строк по некоторым критериям, а затем удалить видимые строки:
12345678910111213141516171819202122232425 | Sub FilterAndDeleteRows ()'Объявить переменную wsDim ws как рабочий листУстановить ws = ActiveSheet'Сбросить существующие фильтрыПри ошибке Возобновить Далееws.ShowAllDataПри ошибке GoTo 0'Применить фильтрws.Range ("a1: d100"). Поле автофильтра: = 1, Criteria1: = "delete"'Удалить строкиApplication.DisplayAlerts = Falsews.Range ("a1: d100"). SpecialCells (xlCellTypeVisible) .DeleteApplication.DisplayAlerts = True'Очистить фильтрПри ошибке Возобновить Далееws.ShowAllDataПри ошибке GoTo 0Конец подписки |
Удалить строку на основе критериев ячейки
Это будет циклически перебирать диапазон, удаляя строки, если ячейка в столбце A соответствует определенным критериям (<0):
1234567891011121314151617181920 | Sub DeleteRowsBasedonCellValue ()'Объявить переменныеУменьшить длину последней строки, длины первой строкиТусклый ряд по всей длинеС ActiveSheet'Определить первую и последнюю строкиFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Проходить по строкам (снизу вверх)For Row = LastRow To FirstRow Step -1Если .Range ("A" & Row) .Value <0, то.Range ("A" и строка) .EntireRow.DeleteКонец, еслиСледующая строкаКонец сКонец подписки |
Программирование на VBA | Генератор кода действительно работает для вас!
Удалить строку, если ячейка пуста
Это будет проходить через диапазон, удаляя строку, если ячейка в столбце A пуста:
1234567891011121314151617181920 | Sub DeleteRowsBasedonCellValue ()'Объявить переменныеУменьшить размер LastRow, равный длине, FirstRow, равной длинеТусклый ряд по всей длинеС ActiveSheet'Определить первую и последнюю строкиFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Прокрутите строки (снизу вверх)For Row = LastRow To FirstRow Step -1Если .Range ("A" & Row) .Value = "" Тогда.Range ("A" и строка) .EntireRow.DeleteКонец, еслиСледующая строкаКонец сКонец подписки |
Удалить пустую строку
В качестве альтернативы, если вы хотите удалить строку, если вся строка пуста (щелкните ссылку для немного другого метода), вы можете использовать этот код:
1234567891011121314151617181920 | Sub DeleteBlankRows ()'Объявить переменныеУменьшить размер LastRow, равный длине, FirstRow, равной длинеТусклый ряд по всей длинеС ActiveSheet'Определить первую и последнюю строкиFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Прокрутите строки (снизу вверх)For Row = LastRow To FirstRow Step -1Если WorksheetFunction.CountA (.Rows (Row)) = 0, то.Rows (Строка) .EntireRow.DeleteКонец, еслиСледующая строкаКонец сКонец подписки |
Удалить строку, если ячейка содержит значение
Это будет циклически перебирать диапазон, удаляя строку, если ячейка в столбце A не пуста:
1234567891011121314151617181920 | Sub DeleteRowsBasedonCellValue ()'Объявить переменныеУменьшить длину последней строки, длины первой строкиТусклый ряд по всей длинеС ActiveSheet'Определить первую и последнюю строкиFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Прокрутите строки (снизу вверх)For Row = LastRow To FirstRow Step -1Если .Range ("A" & Row) .Value "" Тогда.Range ("A" и строка) .EntireRow.DeleteКонец, еслиСледующая строкаКонец сКонец подписки |
Устали искать примеры кода VBA? Попробуйте AutoMacro!
Вставить строку на основе значения ячейки
Это будет проходить через диапазон, вставляя строки, если определенная ячейка в этой строке говорит «вставить»:
1234567891011121314151617181920 | Sub InsertRowsBasedonCellValue ()'Объявить переменныеУменьшить длину последней строки, длины первой строкиТусклый ряд по всей длинеС ActiveSheet'Определить первую и последнюю строкиFirstRow = 1LastRow = .UsedRange.Rows (.UsedRange.Rows.Count) .Row'Прокрутите строки (снизу вверх)For Row = LastRow To FirstRow Step -1Если .Range ("A" & Row) .Value = "insert", то.Range ("A" и строка) .EntireRow.InsertКонец, еслиСледующая строкаКонец сКонец подписки |