excel 是否有VBA代码删除包含数据的最后一行之后的所有行?

s6fujrry  于 2023-06-25  发布在  其他
关注(0)|答案(2)|浏览(175)

我有一个Excel表格,数据在A:Y列中。列A:G将始终包含值,而列H:Y可能不包含值。我想1)根据列“H”对我的表进行排序,这将把包含空白的行移到底部,然后2)只删除那些在列H:Y中不包含数据的行。
数据表将不断变化和增长,因此静态变量不是一个真正的选择。

Table.Sort.SortFields.Add2 Key:=Table.Range("H3"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

With Table.Sort
    .SetRange Table.Range("A3:Y3" & LastRow)
    .Header = xlNo
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

With Tab
    LastRowB = .Range("H" & .Rows.Count).End(xlUp).Row + 1
End With

Tabs.Rows(LastRowB).End(xlDown).Select
Selection.Clear
olqngx59

olqngx591#

当然,经过许多小时的努力想弄清楚这一点,我得到了它的权利后,我张贴我的问题:)。

Tab.Rows(LastRowB & ":" & Tab.Rows.Count).Delete
t40tm48m

t40tm48m2#

这里有一个替代方法,您可以使用过滤器删除行。
你可以调整它以适应你的需要

Sub FilterDeleteAndSort()

    ' Define a variable and assign a table (listobject)
    Dim targetTable As ListObject
    Set targetTable = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1")
    
    ' Filter and delete
    With targetTable
        If .Parent.FilterMode Then .Range.AutoFilter
        .Range.AutoFilter Field:=8, Criteria1:="" ' Field 8 (is column number in the table)
        .Range.AutoFilter Field:=9, Criteria1:=""
        .Range.AutoFilter Field:=10, Criteria1:=""
        .DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
        .Range.AutoFilter
    End With

    ' Sort the table
    targetTable.Sort.SortFields.Clear
    targetTable.Sort.SortFields.Add2 Key:=Range("H1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With targetTable.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

End Sub

相关问题