Excel VBA 宏:合并过滤器并使用宏删除可见行和后续空行
Excel VBA Macro: incorporating filters and using a macro to delete visible and subsequent empty rows
我有一个包含约 50,000 行数据的电子表格。这个值是会波动的,因为我有一个函数可以引入更多的数据。
我希望做的是能够使用我的列过滤器(第 2 行)来显示我不想要的项目。 然后宏 将删除所有可见值,关闭过滤器,删除所有空行,最后重新打开第 2 行中的过滤器。以下代码旨在执行此操作,但在整个数据矩阵中保留了空行。谢谢您的帮助!
Sub DeleteVisible_Empty_BlankRows()
Application.ScreenUpdating = False
Range("C3:V" & rows.count).ClearContents
Worksheets("MyDataPull").AutoFilterMode = False
'Ungroup & regroup necessary columns
Columns("F:K").Columns.Ungroup
Dim r As Range, emrows As Long, i As Long
LRI = Mydatapull.Cells(Mydatapull.rows.count, "C").End(xlUp).Row
'Filter column C from A to Z so that blanks are put at the bottom
Range("C3:V" & LRI).Sort Key1:=Range("C3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
'Filter to only show blanks
Range("C3:V" & LRI).AutoFilter Field:=1, Criteria1:="=", Operator:=xlOr, Criteria2:="=" & ""
'Delete blanks
Range("C3:V" & LRI).EntireRow.Delete
'Turn filters back on
Worksheets("MyDataPull").AutoFilterMode = False
'Delete Extra rows
LRI = Mydatapull.Cells(Mydatapull.rows.count, "C").End(xlUp).Row
Range("C" & LRI + 1 & ":V" & rows.count).EntireRow.Delete
Mydatapull.Range("C2:V2").AutoFilter
Columns("F:K").Columns.Group
End Sub
您是否尝试过先取消过滤数据,然后删除空行?当工作表未过滤时,我个人在处理内容方面取得了更大的成功。
尝试添加:
ActiveSheet.AutoFilter.Sort.SortFields.Clear
ActiveSheet.ShowAllData
在删除空行之前。
让我知道这是否适合你。
我想通了。请参阅上面的更新代码。
我有一个包含约 50,000 行数据的电子表格。这个值是会波动的,因为我有一个函数可以引入更多的数据。
我希望做的是能够使用我的列过滤器(第 2 行)来显示我不想要的项目。 然后宏 将删除所有可见值,关闭过滤器,删除所有空行,最后重新打开第 2 行中的过滤器。以下代码旨在执行此操作,但在整个数据矩阵中保留了空行。谢谢您的帮助!
Sub DeleteVisible_Empty_BlankRows()
Application.ScreenUpdating = False
Range("C3:V" & rows.count).ClearContents
Worksheets("MyDataPull").AutoFilterMode = False
'Ungroup & regroup necessary columns
Columns("F:K").Columns.Ungroup
Dim r As Range, emrows As Long, i As Long
LRI = Mydatapull.Cells(Mydatapull.rows.count, "C").End(xlUp).Row
'Filter column C from A to Z so that blanks are put at the bottom
Range("C3:V" & LRI).Sort Key1:=Range("C3"), Order1:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
'Filter to only show blanks
Range("C3:V" & LRI).AutoFilter Field:=1, Criteria1:="=", Operator:=xlOr, Criteria2:="=" & ""
'Delete blanks
Range("C3:V" & LRI).EntireRow.Delete
'Turn filters back on
Worksheets("MyDataPull").AutoFilterMode = False
'Delete Extra rows
LRI = Mydatapull.Cells(Mydatapull.rows.count, "C").End(xlUp).Row
Range("C" & LRI + 1 & ":V" & rows.count).EntireRow.Delete
Mydatapull.Range("C2:V2").AutoFilter
Columns("F:K").Columns.Group
End Sub
您是否尝试过先取消过滤数据,然后删除空行?当工作表未过滤时,我个人在处理内容方面取得了更大的成功。 尝试添加:
ActiveSheet.AutoFilter.Sort.SortFields.Clear
ActiveSheet.ShowAllData
在删除空行之前。
让我知道这是否适合你。
我想通了。请参阅上面的更新代码。