Vba 基于另一张图纸中的值从一张图纸中删除行
我在表格1的A栏中有总的电子邮件ID,在表格2的A栏中有退回的电子邮件ID。我想删除工作表1中的值或基于工作表2上的值的整行 我尝试了以下代码,但不起作用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
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”这样的注释如果不提供更多信息(例如,在调试模式下单步执行代码并描述发生/未发生的情况),则实际上没有帮助。