VBA如果工作表1上的单元格与工作表2上的单元格匹配 - 删除行?

问题描述:

我有两个工作表,表1和表2.VBA如果工作表1上的单元格与工作表2上的单元格匹配 - 删除行?

在表1我创建了一个表格,允许用户输入值单元格B21,B26,I21,I26,P21,P26。

然后通过单击提交,将数据插入到工作表2上A,B,C,D,E和F列的下一个可用行中。

我也试图创建一个宏,一旦运行,将删除表2中的值匹配sheet1上的那些行上。

目前我通过使用IF语句保持简单,但这给我一个类型不匹配的错误。

Sub QuickCull() 

If Sheets(1).Range("B21").Value = Sheets(2).Range("A:A").Value And _ 
    Sheets(1).Range("B26").Value = Sheets(2).Range("B:B").Value And _ 
    Sheets(1).Range("P21").Value = Sheets(2).Range("C:C").Value And _ 
    Sheets(1).Range("I21").Value = Sheets(2).Range("D:D").Value And _ 
    Sheets(1).Range("I26").Value = Sheets(2).Range("E:E").Value And _ 
    Sheets(1).Range("P26").Value = Sheets(2).Range("F:F").Value Then 

    Rows(ActiveCell.Row).EntireRow.Delete 
End If 

End Sub 

请问有人可以告诉我我要去哪里吗?

+0

你需要替换'Match'所有'If's。例如,替换'If Sheets(1).Range(“B21”)。Value = Sheets(2).Range(“A:A”)。Value'with If If IsError(Application.Match(Sheets(1) .Range(“B21”)。Value,Sheets(2).Range(“A:A”),0))Then'。 –

+0

你测试了我的答案中的代码?任何反馈 ? –

首先,您需要查看是否满足第一个条件,因此我们将使用Match函数在整个列A的Sheets(2)中查找范围(“B21”)中的值。如果它返回一个成功的匹配,我们将使用该结果(RowMatch代表一个行号)。

其次,我们需要检查所有其他IfRowMatchSheets(2)中是否有匹配的值。如果是这样,那么我们可以删除Sheets(2)中的那一行。

尝试下面的代码

Option Explicit 

Sub QuickCull() 

Dim RowMatch As Long 

With Sheets(2) 
    If Not IsError(Application.Match(Sheets(1).Range("B21").Value, .Range("A:A"), 0)) Then 
     RowMatch = Application.Match(Sheets(1).Range("B21").Value, .Range("A:A"), 0) 

     If Sheets(1).Range("B26").Value = .Range("B" & RowMatch).Value And _ 
      Sheets(1).Range("P21").Value = .Range("C" & RowMatch).Value And _ 
      Sheets(1).Range("I21").Value = .Range("D" & RowMatch).Value And _ 
      Sheets(1).Range("I26").Value = .Range("E" & RowMatch).Value And _ 
      Sheets(1).Range("P26").Value = .Range("F" & RowMatch).Value Then 

      .Rows(RowMatch).Delete 
     End If 

    End If 
End With 

End Sub