Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 根据一系列数据删除行_Excel_Vba_Range_Rows - Fatal编程技术网

Excel 根据一系列数据删除行

Excel 根据一系列数据删除行,excel,vba,range,rows,Excel,Vba,Range,Rows,如果列E中的单元格包含与工作表Ark3中范围B1:B30中相同的名称,我希望删除第一张工作表中的整行。我尝试使用下面的代码,但它返回 运行时错误“13”,类型不匹配 将一个值与多个值进行比较的有效方法是将一个值用作查找表。注意:在下面的示例中,我已注释掉delete语句,以便您确认正确的操作 Option Explicit Sub sbDelete_Rows_Matching() Dim wsFirst, wsArk3 As Worksheet With ThisWorkbo

如果列E中的单元格包含与工作表
Ark3
中范围
B1:B30
中相同的名称,我希望删除第一张工作表中的整行。我尝试使用下面的代码,但它返回

运行时错误“13”,类型不匹配


将一个值与多个值进行比较的有效方法是将一个值用作查找表。注意:在下面的示例中,我已注释掉delete语句,以便您确认正确的操作

 Option Explicit

 Sub sbDelete_Rows_Matching()

   Dim wsFirst, wsArk3 As Worksheet
   With ThisWorkbook
     Set wsFirst = .Sheets(1)
     Set wsArk3 = .Sheets("Ark3")
   End With

   ' create lookup table
   Dim lookup
   Set lookup = CreateObject("Scripting.Dictionary")
   Dim cell As Range, key As String
   For Each cell In wsArk3.Range("B1:B30").Cells
     key = cell.Value
     If Len(key) > 0 Then
       If lookup.exists(key) Then
         MsgBox "Ark3 has duplicate value" & vbCr & key, vbCritical, "Warning"
       Else
         lookup.Add key, cell.row
       End If
     End If
   Next cell

   ' process sheet 1
   Dim r, count, lastRow As Long
   count = 0
   Application.ScreenUpdating = False
   With wsFirst
     lastRow = .Range("E" & .Rows.count).End(xlUp).row
     For r = lastRow To 1 Step -1
       If lookup.exists(.Cells(r, 5).Value) Then
         .Cells(r, 5).Interior.Color = vbYellow
         ' .Rows(r).Delete
         count = count + 1
       End If
     Next r
     .Range("A1").Select
   End With
   Application.ScreenUpdating = True
   MsgBox count & " rows deleted"

 End Sub

您正在将单个值与值数组进行比较。您还可以根据30个值的静态范围逐个检查500个值。您能否解释一下:当前单元格中的值必须位于要删除的同一行中,还是仅当该值出现在
B1:B30
范围内时才可以删除?请阅读以下内容:@JvdV,如果活动工作表
(Ark1)
行中的任何单元格中的值出现在
B1:B30
工作表(Ark3)中
我希望删除整行。
 Option Explicit

 Sub sbDelete_Rows_Matching()

   Dim wsFirst, wsArk3 As Worksheet
   With ThisWorkbook
     Set wsFirst = .Sheets(1)
     Set wsArk3 = .Sheets("Ark3")
   End With

   ' create lookup table
   Dim lookup
   Set lookup = CreateObject("Scripting.Dictionary")
   Dim cell As Range, key As String
   For Each cell In wsArk3.Range("B1:B30").Cells
     key = cell.Value
     If Len(key) > 0 Then
       If lookup.exists(key) Then
         MsgBox "Ark3 has duplicate value" & vbCr & key, vbCritical, "Warning"
       Else
         lookup.Add key, cell.row
       End If
     End If
   Next cell

   ' process sheet 1
   Dim r, count, lastRow As Long
   count = 0
   Application.ScreenUpdating = False
   With wsFirst
     lastRow = .Range("E" & .Rows.count).End(xlUp).row
     For r = lastRow To 1 Step -1
       If lookup.exists(.Cells(r, 5).Value) Then
         .Cells(r, 5).Interior.Color = vbYellow
         ' .Rows(r).Delete
         count = count + 1
       End If
     Next r
     .Range("A1").Select
   End With
   Application.ScreenUpdating = True
   MsgBox count & " rows deleted"

 End Sub