2016-03-17 5 views
1

В настоящее время я использую приведенный ниже фрагмент кода, который я нашел в stackxchg, чтобы удалить строки, в результате чего в столбце A. нет числового значения. Это работает, однако, это ужасно медленно для листа с 5000 строк. Есть ли способ, которым я могу заставить эту вещь двигаться быстрее? Концепция заключается в том, что у меня есть несколько строк, которые будут выходить из дат только в том случае, если критерии выполняются, и диаграмма будет сгенерирована с использованием дат в этом столбце. Я хотел бы, чтобы ссылка диапазона диаграммы изменилась со строками, но это сложно, так как формулы в строках все время вниз (и для того, чтобы диаграмма выглядела хорошо, строки должны быть полностью пустыми). Моим обходным решением было найти макрос, который мог бы удалить эти строки (но это слишком медленно, используя этот код). Любая помощь будет оценена по достоинству.Excel VBA для удаления строк - как это сделать быстрее?

Sub Sample() 
Dim LR3 As Long, i3 As Long 

With Sheets("Basket Performance") 
    LR3 = .Range("A" & .Rows.Count).End(xlUp).Row 

    For i3 = LR3 To 2 Step -1 
     If Not IsNumeric(.Range("A" & i3).Value) Or _ 
     .Range("A" & i3).Value = "" Then .Rows(i3).Delete 
    Next i3 
End With 

End Sub

+0

Кроме того, я хотел бы создать еще один макрос, который расширяет строку до 5000 строк. Если это проще, возможно, просто макрос, который изменит диапазон задания диаграммы в зависимости от того, сколько строк имеет числовые значения! (это было бы предпочтительнее). Спасибо за любую помощь. – Jemie

+2

Отключите вычисления и отключите события от стрельбы, скорее всего, это то, что замедляет работу. Помимо этого вы можете задуматься о создании диапазона объединения и сразу же удалить целое. –

+0

См. [Медленный процесс удаления строк - Как сделать быстрее?] (Http://stackoverflow.com/questions/35605424/slow-process-on-deleting-rows-how-to-make-faster/35606697#35606697) , – Jeeped

ответ

2

Вы можете сделать одно удаление в конце вашего цикла:

Sub Sample() 

    Dim LR3 As Long, i3 As Long, rng As Range 

    With Sheets("Basket Performance") 
     LR3 = .Range("A" & .Rows.Count).End(xlUp).Row 

     For i3 = LR3 To 2 Step -1 
      If Not IsNumeric(.Range("A" & i3).Value) Or _ 
          .Range("A" & i3).Value = "" Then 
       If rng Is Nothing Then 
        Set rng = .Cells(i3, 1) 
       Else 
        Set rng = application.union(rng, .Cells(i3, 1)) 
       End If 
      End If '<<EDIT 
     Next i3 
    End With 

    If Not rng Is Nothing then rng.Entirerow.Delete 

End Sub 
+0

Я получаю ошибку« Следующий без »для этого последнего Следующая – Jemie

+0

Missed the End If - добавлено выше –

0

вы можете попробовать это

Option Explicit 

Sub delrow() 

With ThisWorkbook.Worksheets("Basket Performance") 
    .Columns("A").Insert '<== insert a "helper" column for counting and sorting purposes. it'll be removed by the end of the macro 
    .Columns("B").SpecialCells(xlCellTypeConstants, xlNumbers).Offset(, -1).FormulaR1C1 = "=COUNT(R1C[1]:RC[1])" 
    .Cells.Sort key1:=.Columns("A"), order1:=xlAscending, Orientation:=xlTopToBottom, Header:=xlNo 
    .Columns("A").Cells.SpecialCells(xlCellTypeBlanks).EntireRow.Delete '<== maybe you don't need to delete but just define the chart range reference from row 1 down to the last row in column A with a number 
    .Columns("A").Delete '<== remove the "helper" column 
End With 

End Sub 

вы можете не принимать во внимание удаляя «не числовые» строки после сортировки и просто определяя ссылку диапазона диаграммы из строки 1 до последней строки в столбце A w с номером вместо

+0

Привет, пользователь - ваше решение было бы очень идеальным - как кажется, все коды VBA размещенные здесь до сих пор не распознают формулы со значениями как Numeric (они удаляют все строки с формулами, которые фактически выбивают значения). Если бы вы могли помочь мне разобраться, как определить диапазон диаграмм в VBA, чтобы это сделать, это было бы высоко оценено. – Jemie

+0

, если я ответил на ваш вопрос, примите мое решение. что касается области диаграммы, которую вы можете использовать для работы с макрорекордером, а затем посмотрите на автоматически сгенерированный код. если у вас все еще есть проблемы, вы можете начать новый вопрос. в этом последнем случае я бы рекомендовал вам действовать так же, как и в этом случае, то есть показать свой код и все ваши усилия, прежде чем просить о помощи и детализировать, что пошло не так с ними – user3598756

 Смежные вопросы

  • Нет связанных вопросов^_^