Excel 2010 удаляет только определенные пустые строки


1

Мы используем приложение, которое генерирует финансовый обзор в Excel. (Используем Excel 2010 в данный момент.) Из-за некоторой конфигурации в этом приложении иногда он генерирует 4 или 5 пустых строк между значениями в Excel, где нам нужна только одна пустая строка. Я не могу использовать макрос, потому что эти лишние строки не всегда находятся в одном и том же месте.

Я пытаюсь удалить эти чрезмерно пустые строки, но я не хочу удалять их все. Отдельные пустые строки хороши и очень нужны. Есть ли какая-нибудь формула, которая помогла бы мне удалить лишние пустые строки минус одна пустая строка, которая должна быть там?

Надеюсь, вы, ребята, можете мне помочь.


«Я не могу использовать макрос, потому что эти избыточные строки не всегда находятся в одном и том же месте». Означает ли это, что вам не нужно решение VBA или вы не знаете, как создать решение VBA? Потому что VBA - единственный вариант, о котором я могу думать.
K.Dᴀᴠɪs

Ответы:


1

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

Фрагмент кода:

If .CountA(ws.rows(r)) = 0

Тогда вы хотели удалить только строку, если имеется более одной пустой строки подряд, поэтому мы добавим это в наш If...Thenоператор. Это проверяет вышеуказанную строку с r - 1:

... And .CountA(ws.Rows(r - 1)) = 0

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

Вот весь код VBA:

Sub removeEmptySpaces()

    Dim r As Long, ws As Worksheet, delRng As Range
    Set ws = ThisWorkbook.Worksheets(1)

    With Application.WorksheetFunction
        For r = 2 To lastRow(ws)
            If .CountA(ws.Rows(r)) = 0 And .CountA(ws.Rows(r - 1)) = 0 Then
                If delRng Is Nothing Then
                    Set delRng = ws.Rows(r)
                Else
                    Set delRng = Union(ws.Rows(r), delRng)
                End If
            End If
        Next
    End With

    If Not delRng Is Nothing Then delRng.Delete

End Sub

Function lastRow(ws As Worksheet, Optional col As Variant = 1) As Long
    With ws
        lastRow = .Cells(.Rows.Count, col).End(xlUp).Row
    End With
End Function
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.