2015-06-27 5 views
1

Я ищу, чтобы узнать, есть ли более эффективный способ достижения результата ниже, поэтому при необходимости он может быть расширен.Удалить пустые строки с помощью VBA - MS Excel

Я использую это, чтобы очистить большие электронные таблицы, у которых есть строки C-Z. Я предполагаю, что должен быть способ очистить его, чтобы он не должен был удваиваться по размеру, если мне нужно очистить электронную таблицу данными с C до AZ.

Прошло некоторое время с тех пор, как я использовал VBA, я нашел код ниже в Интернете. (считая ROW B, поскольку у данной таблицы была пустая ROW A)

Sub delem() 
Dim lr As Long, r As Long 
lr = Cells(Rows.Count, "B").End(xlUp).Row 
For r = lr To 1 Step -1 
    If Range("C" & r).Value = "" And Range("D" & r).Value = "" And Range("E" & r).Value = "" And Range("F" & r).Value = "" And Range("G" & r).Value = "" And Range("H" & r).Value = "" And Range("I" & r).Value = "" And Range("J" & r).Value = "" And Range("K" & r).Value = "" And Range("L" & r).Value = "" And Range("M" & r).Value = "" And Range("N" & r).Value = "" And Range("O" & r).Value = "" And Range("P" & r).Value = "" And Range("Q" & r).Value = "" And Range("R" & r).Value = "" And Range("S" & r).Value = "" And Range("T" & r).Value = "" And Range("U" & r).Value = "" And Range("V" & r).Value = "" And Range("W" & r).Value = "" And Range("X" & r).Value = "" And Range("Y" & r).Value = "" And Range("Z" & r).Value = "" Then Rows(r).Delete 
Next r 
End Sub 

Спасибо!

ответ

2

Просто добавьте внутренний цикл, чтобы пройти через столбцы, о которых вы заботитесь. Это будет работать намного быстрее, так как VBA не закорачивает оператор If (все оценки вычисляются). Но с петлей, вы можете выйти рано, если вы нашли значение в любом месте:

Sub delem() 
    Dim last As Long 
    Dim current As Long 
    Dim col As Long 
    Dim retain As Boolean 

    last = Cells(Rows.Count, "B").End(xlUp).Row 
    For current = last To 1 Step -1 
     retain = False 
     For col = 3 To 26 
      If Cells(current, col).Value <> vbNullString Then 
       retain = True 
       Exit For 
      End If 
     Next col 
     If Not retain Then Rows(current).Delete 
    Next current 
End Sub 
+0

Работающий шарм, казалось, работал так же быстро, как 3000 рядов, чтобы избавиться от него, поэтому не ожидал, что он пойдет мгновенно! Но он выглядит намного чище, и вот что я был после :) –

0

Функция COUNTA листа Excel чистый способ проверить, если диапазон пуст.

Sub delem() 
    Dim lr As Long, r As Long 
    lr = Cells(Rows.Count, "B").End(xlUp).Row 
    For r = lr To 1 Step -1 

    'This function Counts the number of cells that are not empty 
    If WorksheetFunction.CountA(Range(Cells(r, 3), Cells(r, 26)) = 0 Then 
     Rows(r).Delete 
    End If 

    Next r 
End Sub 
Смежные вопросы