Могут быть случаи, когда нам нужно удалить пустые строки или столбцы из файла в Excel. Для цикла мы напишем макрос / код vba. Код, который нам нужно использовать, будет варьироваться от ситуации к ситуации. Иногда нам может потребоваться удалить одну строку или столбец, а иногда нам нужно удалить весь диапазон строк или столбцов, а иногда и строк / столбцов на основе одного или нескольких условий.

Если вам нужно удалить только одну или несколько определенных строк или столбцов, мы используем цикл VBA excel for, и вы можете просто использовать следующий код — _Option Explicit Sub macro1 ()

Application.DisplayAlerts = False With Worksheets («Sheet1»)

Rows («5: 6»). Удалить .Columns («A: D»). Удалить конец с помощью Application.DisplayAlerts = True End Sub_ Вы можете увидеть код, который был скопирован в окно кода Module1. Чтобы скопировать код, нажмите Alt + F11 в своем файле. Слева вы увидите объекты Microsoft Excel. Щелкните правой кнопкой мыши и выберите «Вставить», затем щелкните «Модуль». Окно кода появится справа. Скопируйте код. См. Картинку ниже —

img1

Application.DisplayAlerts = False

Мы устанавливаем для предупреждений отображения значение false и сохраняем файл с нужным именем. А затем установите для предупреждений отображения значение true непосредственно перед End Sub.

With Worksheets («Sheet1») — это цикл With, который заканчивается на End With.

Если вы используете это для цикла VBA Excel, все операторы внутри этого цикла, которые используют этот объект, не должны начинаться с «Рабочих листов (« Лист1 »)». Вместо этого они могут начинаться с точки (.).

.Rows («5: 6»). Delete удалит только строки 5 и 6.

Columns («A: D»). Delete удалит столбцы от A до D.

В этом случае будут удалены только указанные строки / столбцы.

Однако иногда вам может потребоваться удалить строки / столбцы в зависимости от определенных условий. Например, предположим, что мы хотим удалить все столбцы в файле, которые содержат «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, как показано на рисунке ниже

img2

Здесь 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_ См. код ниже —

img3

Вы могли заметить, что .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_

img4

Точно так же вы можете добавить этот код или код, который у вас есть, в зависимости от требований. Вы можете добавить несколько условий для строк и даже для столбцов.

image 48