Удалить пустые ("") строки VBA - PullRequest
0 голосов
/ 20 октября 2018

Я сейчас ищу в течение 2 часов ... Но я не получаю его, я вижу много связанных вопросов по stackoverflow ... Но не нашел правильного решения (пока) ...

То, что я ищу: я превосходен, который строится с использованием мощного запроса.(работает отлично) У меня есть скрипт VBA для обновления запроса мощности каждые 4 часа (работает отлично) У меня есть скрипт VBA для извлечения всех листов в CSV (работает отлично)

Но есть ловушка,листы построены со специальными символами, поэтому я создал дополнительный лист со всеми подстановками, которые вы могли бы подумать ... (также отлично работает)

, но этот дополнительный лист использует информацию из 3000 строк.(на основе таблицы, извлеченной из запроса мощности).Энергетический запрос жив, иногда мне нужно 2000 строк, иногда 2800+, поэтому я сделал дополнительный лист на основе 3000 строк ...

С формулой:

=IFERROR(substitutions.....;"")

Ячейки внизу файла выглядят пустыми, потому что я использовал "" в формуле, но на самом деле ячейки не пустые ... Поэтому мне нужен скрипт vba, который будет смотреть на пустые ячейки, созданные с помощью"" ...

Ответы [ 2 ]

0 голосов
/ 20 октября 2018

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


Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.ActiveSheet
Dim rng As Range, myCell As Range, DeleteMe As Range

'Loop to find rows to delete
For Each myCell In ws.Range("A1:A3000")
    If myCell = "" Then
        If DeleteMe Is Nothing Then
            Set DeleteMe = myCell
        Else
            Set DeleteMe = Union(DeleteMe, myCell)
        End If
    End If
Next myCell

'Delete rows here
If Not DeleteMe Is Nothing Then DeleteMe.EntireRow.Delete

End Sub
0 голосов
/ 20 октября 2018

Я нашел решение:

Sub DeleteRowsWithEmptyColumnDCell()
Dim rng As Range
Dim i As Long
Set rng = ThisWorkbook.ActiveSheet.Range("A1:A3000")
With rng
    ' Loop through all cells of the range
    ' Loop backwards, hence the "Step -1"
    For i = .Rows.Count To 1 Step -1
        If .Item(i) = "" Then
            ' Since cell is empty, delete the whole row
            .Item(i).EntireRow.Delete
        End If
    Next i
End With
End Sub

Но это медленно и требует много памяти ... Надеюсь, у кого-то есть лучшее решение!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...