2016-12-31 82 views
0

我有兩個工作表,表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

你測試了我的答案中的代碼?任何反饋 ? –

回答

1

首先,您需要查看是否滿足第一個條件,因此我們將使用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 
相關問題