Vba 基于另一张图纸中的值从一张图纸中删除行

Vba 基于另一张图纸中的值从一张图纸中删除行,vba,excel,Vba,Excel,我在表格1的A栏中有总的电子邮件ID,在表格2的A栏中有退回的电子邮件ID。我想删除工作表1中的值或基于工作表2上的值的整行 我尝试了以下代码,但不起作用 Public Sub delete_selected_rows() 'look at sheet2, A1 through A3 for search values For Each search_value In Worksheets("Sheet2").Range("A1:A3") 'as long as there is someth

我在表格1的A栏中有总的电子邮件ID,在表格2的A栏中有退回的电子邮件ID。我想删除工作表1中的值或基于工作表2上的值的整行

我尝试了以下代码,但不起作用

Public Sub delete_selected_rows()

'look at sheet2, A1 through A3 for search values
For Each search_value In Worksheets("Sheet2").Range("A1:A3")
'as long as there is something to delete...
  Do While Not Worksheets("Sheet1").Range("A1:A3"). _
    Find(search_value.Value, lookat:=xlWhole) Is Nothing
    '...delete that row
    Worksheets("Sheet1").Range("A1:A3").Find(search_value.Value, _
    lookat:=xlWhole).EntireRow.Delete
  Loop
Next

End Sub
有什么帮助吗?

我会用这个:

Public Sub delete_selected_rows()
    Dim rng1 As Range, rng2 As Range, rngToDel As Range, c As Range
    Dim lastRow as Long

    With Worksheets("Sheet1")
        lastRow = .Cells(.Rows.Count,"A").End(xlUp).Row  
        Set rng1 = .Range("A1:A" & lastRow)
    End With

    Set rng2 = Worksheets("Sheet2").Range("A:A")

    For Each c In rng1
        If Not IsError(Application.Match(c.Value, rng2, 0)) Then
            'if value from rng1 is found in rng2 then remember this cell for deleting
            If rngToDel Is Nothing Then
                Set rngToDel = c
            Else
                Set rngToDel = Union(rngToDel, c)
            End If
        End If
    Next c

    If Not rngToDel Is Nothing Then rngToDel.EntireRow.Delete
End Sub
我会用这个:

Public Sub delete_selected_rows()
    Dim rng1 As Range, rng2 As Range, rngToDel As Range, c As Range
    Dim lastRow as Long

    With Worksheets("Sheet1")
        lastRow = .Cells(.Rows.Count,"A").End(xlUp).Row  
        Set rng1 = .Range("A1:A" & lastRow)
    End With

    Set rng2 = Worksheets("Sheet2").Range("A:A")

    For Each c In rng1
        If Not IsError(Application.Match(c.Value, rng2, 0)) Then
            'if value from rng1 is found in rng2 then remember this cell for deleting
            If rngToDel Is Nothing Then
                Set rngToDel = c
            Else
                Set rngToDel = Union(rngToDel, c)
            End If
        End If
    Next c

    If Not rngToDel Is Nothing Then rngToDel.EntireRow.Delete
End Sub
我会用这个:

Public Sub delete_selected_rows()
    Dim rng1 As Range, rng2 As Range, rngToDel As Range, c As Range
    Dim lastRow as Long

    With Worksheets("Sheet1")
        lastRow = .Cells(.Rows.Count,"A").End(xlUp).Row  
        Set rng1 = .Range("A1:A" & lastRow)
    End With

    Set rng2 = Worksheets("Sheet2").Range("A:A")

    For Each c In rng1
        If Not IsError(Application.Match(c.Value, rng2, 0)) Then
            'if value from rng1 is found in rng2 then remember this cell for deleting
            If rngToDel Is Nothing Then
                Set rngToDel = c
            Else
                Set rngToDel = Union(rngToDel, c)
            End If
        End If
    Next c

    If Not rngToDel Is Nothing Then rngToDel.EntireRow.Delete
End Sub
我会用这个:

Public Sub delete_selected_rows()
    Dim rng1 As Range, rng2 As Range, rngToDel As Range, c As Range
    Dim lastRow as Long

    With Worksheets("Sheet1")
        lastRow = .Cells(.Rows.Count,"A").End(xlUp).Row  
        Set rng1 = .Range("A1:A" & lastRow)
    End With

    Set rng2 = Worksheets("Sheet2").Range("A:A")

    For Each c In rng1
        If Not IsError(Application.Match(c.Value, rng2, 0)) Then
            'if value from rng1 is found in rng2 then remember this cell for deleting
            If rngToDel Is Nothing Then
                Set rngToDel = c
            Else
                Set rngToDel = Union(rngToDel, c)
            End If
        End If
    Next c

    If Not rngToDel Is Nothing Then rngToDel.EntireRow.Delete
End Sub
试试这个:

Sub Macro1()

Dim lrow As Long
Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")

With ws1
    lrow = .Range("A" & .Rows.Count).End(xlUp).Row
    With .Range("B1:B" & lrow)
        .Formula = "=IFERROR(MATCH(A1," & ws2.Name & "!A:A,0),"""")"
        .Value = .Value
        .AutoFilter 1, "<>"
        .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    .AutoFilterMode = False
End With

End Sub
Sub宏1()
暗淡的光线和长的一样
将ws1标注为工作表,将ws2标注为工作表
Set ws1=thiswoolk.Sheets(“Sheet1”)
Set ws2=thiswoolk.Sheets(“Sheet2”)
使用ws1
lrow=.Range(“A”&.Rows.Count).End(xlUp).Row
带.Range(“B1:B”和lrow)
.Formula=“=IFERROR(匹配(A1,&ws2.Name&”!A:A,0),“”)
.Value=.Value
.AutoFilter 1“
.Offset(1,0).特殊单元格(xlCellTypeVisible).EntireRow.Delete
以
.AutoFilterMode=False
以
端接头
试试这个:

Sub Macro1()

Dim lrow As Long
Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")

With ws1
    lrow = .Range("A" & .Rows.Count).End(xlUp).Row
    With .Range("B1:B" & lrow)
        .Formula = "=IFERROR(MATCH(A1," & ws2.Name & "!A:A,0),"""")"
        .Value = .Value
        .AutoFilter 1, "<>"
        .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    .AutoFilterMode = False
End With

End Sub
Sub宏1()
暗淡的光线和长的一样
将ws1标注为工作表,将ws2标注为工作表
Set ws1=thiswoolk.Sheets(“Sheet1”)
Set ws2=thiswoolk.Sheets(“Sheet2”)
使用ws1
lrow=.Range(“A”&.Rows.Count).End(xlUp).Row
带.Range(“B1:B”和lrow)
.Formula=“=IFERROR(匹配(A1,&ws2.Name&”!A:A,0),“”)
.Value=.Value
.AutoFilter 1“
.Offset(1,0).特殊单元格(xlCellTypeVisible).EntireRow.Delete
以
.AutoFilterMode=False
以
端接头
试试这个:

Sub Macro1()

Dim lrow As Long
Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")

With ws1
    lrow = .Range("A" & .Rows.Count).End(xlUp).Row
    With .Range("B1:B" & lrow)
        .Formula = "=IFERROR(MATCH(A1," & ws2.Name & "!A:A,0),"""")"
        .Value = .Value
        .AutoFilter 1, "<>"
        .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    .AutoFilterMode = False
End With

End Sub
Sub宏1()
暗淡的光线和长的一样
将ws1标注为工作表,将ws2标注为工作表
Set ws1=thiswoolk.Sheets(“Sheet1”)
Set ws2=thiswoolk.Sheets(“Sheet2”)
使用ws1
lrow=.Range(“A”&.Rows.Count).End(xlUp).Row
带.Range(“B1:B”和lrow)
.Formula=“=IFERROR(匹配(A1,&ws2.Name&”!A:A,0),“”)
.Value=.Value
.AutoFilter 1“
.Offset(1,0).特殊单元格(xlCellTypeVisible).EntireRow.Delete
以
.AutoFilterMode=False
以
端接头
试试这个:

Sub Macro1()

Dim lrow As Long
Dim ws1 As Worksheet, ws2 As Worksheet

Set ws1 = ThisWorkbook.Sheets("Sheet1")
Set ws2 = ThisWorkbook.Sheets("Sheet2")

With ws1
    lrow = .Range("A" & .Rows.Count).End(xlUp).Row
    With .Range("B1:B" & lrow)
        .Formula = "=IFERROR(MATCH(A1," & ws2.Name & "!A:A,0),"""")"
        .Value = .Value
        .AutoFilter 1, "<>"
        .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
    End With
    .AutoFilterMode = False
End With

End Sub
Sub宏1()
暗淡的光线和长的一样
将ws1标注为工作表,将ws2标注为工作表
Set ws1=thiswoolk.Sheets(“Sheet1”)
Set ws2=thiswoolk.Sheets(“Sheet2”)
使用ws1
lrow=.Range(“A”&.Rows.Count).End(xlUp).Row
带.Range(“B1:B”和lrow)
.Formula=“=IFERROR(匹配(A1,&ws2.Name&”!A:A,0),“”)
.Value=.Value
.AutoFilter 1“
.Offset(1,0).特殊单元格(xlCellTypeVisible).EntireRow.Delete
以
.AutoFilterMode=False
以
端接头

仍然没有从表1中删除。您确定您的值确实相等吗?代码非常适合我..检查您的值是否有额外的前导/尾随空格没有前导或尾随空格。这些值完全匹配。但它仍然没有在表1中删除。啊,Simoco,我认为rng1和rng2是混淆的。它应该在Sheet1中搜索Sheet2中的值,因此for应该在rng2上,而.Match应该在rng1上。最好的方法应该是快速运行@Paramasivan imo如果不提供更多信息(例如,在调试模式下单步执行代码并描述发生/未发生的情况),则类似于“它不工作”的注释实际上没有帮助。仍然没有从表1中删除。您确定您的值确实相等吗?代码非常适合我..检查您的值是否有额外的前导/尾随空格没有前导或尾随空格。这些值完全匹配。但它仍然没有在表1中删除。啊,Simoco,我认为rng1和rng2是混淆的。它应该在Sheet1中搜索Sheet2中的值,因此for应该在rng2上,而.Match应该在rng1上。最好的方法应该是快速运行@Paramasivan imo如果不提供更多信息(例如,在调试模式下单步执行代码并描述发生/未发生的情况),则类似于“它不工作”的注释实际上没有帮助。仍然没有从表1中删除。您确定您的值确实相等吗?代码非常适合我..检查您的值是否有额外的前导/尾随空格没有前导或尾随空格。这些值完全匹配。但它仍然没有在表1中删除。啊,Simoco,我认为rng1和rng2是混淆的。它应该在Sheet1中搜索Sheet2中的值,因此for应该在rng2上,而.Match应该在rng1上。最好的方法应该是快速运行@Paramasivan imo如果不提供更多信息(例如,在调试模式下单步执行代码并描述发生/未发生的情况),则类似于“它不工作”的注释实际上没有帮助。仍然没有从表1中删除。您确定您的值确实相等吗?代码非常适合我..检查您的值是否有额外的前导/尾随空格没有前导或尾随空格。这些值完全匹配。但它仍然没有在表1中删除。啊,Simoco,我认为rng1和rng2是混淆的。它应该在Sheet1中搜索Sheet2中的值,因此for应该在rng2上,而.Match应该在rng1上。最好的方法应该是快速运行@Paramasivan imo“It is not working”这样的注释如果不提供更多信息(例如,在调试模式下单步执行代码并描述发生/未发生的情况),则实际上没有帮助。