Удаление строк и столбцов с помощью VBA в Microsoft Excel
Могут быть случаи, когда нам нужно удалить пустые строки или столбцы из файла в Excel. Для цикла мы напишем макрос / код vba. Код, который нам нужно использовать, будет варьироваться от ситуации к ситуации. Иногда нам может потребоваться удалить одну строку или столбец, а иногда нам нужно удалить весь диапазон строк или столбцов, а иногда и строк / столбцов на основе одного или нескольких условий.
Если вам нужно удалить только одну или несколько определенных строк или столбцов, мы используем цикл VBA excel for, и вы можете просто использовать следующий код — _Option Explicit Sub macro1 ()
Application.DisplayAlerts = False With Worksheets («Sheet1»)
Application.DisplayAlerts = False
Мы устанавливаем для предупреждений отображения значение false и сохраняем файл с нужным именем. А затем установите для предупреждений отображения значение true непосредственно перед End Sub.
With Worksheets («Sheet1») — это цикл With, который заканчивается на End With.
Если вы используете это для цикла VBA Excel, все операторы внутри этого цикла, которые используют этот объект, не должны начинаться с «Рабочих листов (« Лист1 »)». Вместо этого они могут начинаться с точки (.).
.Rows («5: 6»). Delete удалит только строки 5 и 6.
В этом случае будут удалены только указанные строки / столбцы.
Однако иногда вам может потребоваться удалить строки / столбцы в зависимости от определенных условий. Например, предположим, что мы хотим удалить все столбцы в файле, которые содержат «Test» в качестве заголовка. В этом случае нам нужен цикл, который будет проверять от одного столбца к другому, и когда критерии будут выполнены, он удалит столбец.
Мы можем использовать такой код. Обратите внимание, что каждый человек подготовит код в удобной для него манере. Это лишь один из способов кодирования, и не единственный.
_Option Явный вспомогательный макрос2 ()
Dim i As Long, lcol As Long Application.DisplayAlerts = False With Worksheets («Sheet1»)
lcol = .Range («A1»). End (xlToRight) .Column For i = lcol to 1 Step -1 Если .Cells (1, i) .Value = «», то выйти для If .Cells (1, i). value = «Test» Затем .Columns (i) .Delete Next i Конец с помощью Application.DisplayAlerts = True End Sub_ См. код, который был сохранен в Модуле 1, как показано на рисунке ниже
Здесь lcol — это последний столбец на листе, в котором есть данные. Если вам случится протестировать этот код в пустом файле, lcol будет иметь значение 16384 или номер последнего столбца в соответствии с вашей версией Excel. Затем мы переходим от последнего столбца к первому, каждый раз перемещаясь на один шаг назад. Мы движемся назад, потому что код удаления работает нормально только тогда, когда вы начинаете удаление с последней строки или последнего столбца. Если вы начнете с 1-й строки / столбца, код имеет тенденцию к ошибке.
1 ^ st ^, если там вводится условие, если вы запускаете макрос в пустом файле. В Excel макрос будет зацикливаться от последнего столбца, который в данном случае равен 16384, до столбца 1, и это может занять довольно много времени. Поэтому, если код обнаружит пустой столбец, он немедленно завершит цикл с помощью оператора exit For. Условие 2 ^ nd ^ if проверяет, является ли значение «Тест», и удаляет столбец, если «Тест» найден.
Если вы хотите удалить строки вместо столбцов, код изменится на — _Option Explicit Sub macro3 ()
Dim i As Long, lrow As Long Application.DisplayAlerts = False With Worksheets («Sheet1»)
lrow = .range («A» & .Rows.Count) .End (xlUp) .Row For i = lrow to 2 Step -1 Если .Cells (i, 1) .Value = «», то выйти, если .Cells ( i, 1) .Value = «Test» Then .Rows (i) .Delete Next i End With Application.DisplayAlerts = True End Sub_ См. код ниже —
Вы могли заметить, что .Cells (1, i) .value изменяется на .Cells (i, 1) .value в приведенном выше коде. Это происходит потому, что в первом коде мы удаляли столбцы, поэтому переменная «i» должна была пройти по столбцам, а в коде 2 ^ nd ^ она должна пройти по строкам. Здесь мы перейдем от последней строки к строке 2 ^ nd ^, так как строка 1 ^ st ^ содержит заголовки, которые необходимо сохранить.
В соответствии с требованиями к коду вы даже можете объединить коды удаления строк и столбцов в один код. Вы даже можете указать несколько условий, на основании которых следует удалить строку / столбец. Предположим, мы хотим удалить все строки, в которых столбец 1 ^ st ^ содержит текст, например Test или Dummy, тогда код будет таким — _Option Explicit Sub macro4 ()
Dim i As Long, lrow As Long Application.DisplayAlerts = False With Worksheets («Sheet1»)
lrow = .range («A» & .Rows.Count) .End (xlUp) .Row For i = lrow to 2 Step -1 Если .Cells (i, 1) .Value = «», то выйти, если .Cells ( i, 1) .Value = «Test» или .Cells (i, 1) .Value = «Dummy» Затем .Rows (i) .Delete Next i End With Application.DisplayAlerts = True End Sub_
Точно так же вы можете добавить этот код или код, который у вас есть, в зависимости от требований. Вы можете добавить несколько условий для строк и даже для столбцов.