根据两列中的条件自动筛选Excel工作表
很抱歉,如果这是一个常见的问题,但我对Excel VBA的世界有点陌生,我一直很难找到一种方法来做我需要的事情 我有一个相当大的工作表,需要能够根据两列中的条件删除行 下面是一些非常基本的数据来解释我需要做什么 A列根据两列中的条件自动筛选Excel工作表,excel,vba,Excel,Vba,很抱歉,如果这是一个常见的问题,但我对Excel VBA的世界有点陌生,我一直很难找到一种方法来做我需要的事情 我有一个相当大的工作表,需要能够根据两列中的条件删除行 下面是一些非常基本的数据来解释我需要做什么 A列 苹果 香蕉 苹果 苹果 橙色的 葡萄 列B 蓝色的 红色的 绿色的 黄色的 黑色的 我需要删除a列中有重复值且B列中有空白值的行。因此,在上面的示例数据中,我想删除第4行,因为a列中有重复值(Apple),B列中有空白值 显然,在这个示例中,我可以轻松地手动删除该行。但是实际的工
谢谢。我为您在OP中给出的示例编写了代码。您可以根据需要编辑代码。在尝试此操作之前,请备份原始文件,因为它会删除行
Sub RemoveData()
Dim LastRow, Filtred_Rows_Count As Long
Sheets("Sheet1").Select
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set Rng = Range("A1:B" & LastRow)
Range("A1:A" & LastRow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
For Each c In Range([J2], Cells(Rows.Count, "J").End(xlUp))
With Rng
.AutoFilter
.AutoFilter Field:=1, Criteria1:=c.Value
Filtred_Rows_Count = Intersect(Columns(1), ActiveSheet.UsedRange).SpecialCells(xlCellTypeVisible).Count
If Filtred_Rows_Count > 2 Then
.AutoFilter Field:=2, Criteria1:=""
ActiveSheet.Range("A1:B" & LastRow).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
End With
ActiveSheet.ShowAllData
Next
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
Columns("J:J").EntireColumn.Delete
End Sub
我为您在OP中给出的示例编写了代码。您可以根据需要编辑代码。在尝试此操作之前,请备份原始文件,因为它会删除行
Sub RemoveData()
Dim LastRow, Filtred_Rows_Count As Long
Sheets("Sheet1").Select
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
LastRow = Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Set Rng = Range("A1:B" & LastRow)
Range("A1:A" & LastRow).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("J1"), Unique:=True
For Each c In Range([J2], Cells(Rows.Count, "J").End(xlUp))
With Rng
.AutoFilter
.AutoFilter Field:=1, Criteria1:=c.Value
Filtred_Rows_Count = Intersect(Columns(1), ActiveSheet.UsedRange).SpecialCells(xlCellTypeVisible).Count
If Filtred_Rows_Count > 2 Then
.AutoFilter Field:=2, Criteria1:=""
ActiveSheet.Range("A1:B" & LastRow).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End If
End With
ActiveSheet.ShowAllData
Next
If ActiveSheet.AutoFilterMode = True Then ActiveSheet.AutoFilterMode = False
Columns("J:J").EntireColumn.Delete
End Sub
请尝试以下代码:
Sub DeleteBlankDuplicate()
Dim current As String
ActiveSheet.Range("A1").Activate
Do While ActiveCell.Value <> ""
current = ActiveCell.Address
ActiveCell.Offset(1, 0).Activate
Do While ActiveCell.Value <> ""
If ((ActiveSheet.Range(current).Value = ActiveCell.Value) And ActiveCell.Offset(0, 1).Value = "") Then
ActiveSheet.Rows(ActiveCell.Row).Delete
Else
ActiveCell.Offset(1, 0).Activate
End If
Loop
ActiveSheet.Range(current).Offset(1, 0).Activate
Loop
End Sub
请尝试以下代码:
Sub DeleteBlankDuplicate()
Dim current As String
ActiveSheet.Range("A1").Activate
Do While ActiveCell.Value <> ""
current = ActiveCell.Address
ActiveCell.Offset(1, 0).Activate
Do While ActiveCell.Value <> ""
If ((ActiveSheet.Range(current).Value = ActiveCell.Value) And ActiveCell.Offset(0, 1).Value = "") Then
ActiveSheet.Rows(ActiveCell.Row).Delete
Else
ActiveCell.Offset(1, 0).Activate
End If
Loop
ActiveSheet.Range(current).Offset(1, 0).Activate
Loop
End Sub
谢谢Mrig&J.B。谢谢Mrig&J.B。