如果单元格值不在列表中,则删除行

时间:2016-11-24 07:52:54

标签: excel vba excel-vba

我有两张纸:在第一张我有日期,在sheet2中,我有一列A中的名字。我想删除第一张表中O列中没有sheet2名称的所有行。代码只删除第一张表中的所有内容。欢迎任何帮助。

Sub Demo()
Dim Rng As Range, List As Object, Rw As Long
Dim x As Date
x = Now()

Set List = CreateObject("Scripting.Dictionary")
With Sheets("Sheet2")
  For Each Rng In .Range("A1", .Range("A" & Rows.Count).End(xlUp))
    If Not List.Exists(Rng.Value) Then
      List.Add Rng.Value, Nothing
    End If
  Next
End With

With Sheets("query " & Format(x, "dd.mm.yyyy"))
  For Rw = .Range("O" & Rows.Count).End(xlUp).Row To 1 Step -1
    If Not List.Exists(.Cells(Rw, "O").Value) Then
      .Rows(Rw).Delete
    End If
  Next
End With

Set List = Nothing
End Sub

2 个答案:

答案 0 :(得分:1)

我不确定这是否完全符合您的要求,但它确实非常相似。要明确:

如果找到名称,则在Sheet1中标记与名称列表相邻的单元格,如果所述相邻列中的单元格为空,则随后删除整行。

Sub Macro()

Dim r As Long
Dim r2 As Long
Dim counter As Long
Dim counter2 As Long


Range("O1").Select
Selection.End(xlDown).Select
r = ActiveCell.Row

Sheets(ActiveSheet.Index + 1).Select
Range("A1").Select
Selection.End(xlDown).Select
r2 = ActiveCell.Row
Range("A1").Select
For counter = 1 To r2
needle = ActiveCell.Value
Sheets(ActiveSheet.Index - 1).Select
On Error GoTo NotFound
Range(Cells(1, 15), Cells(r, 15)).Find(needle).Select
Selection.Offset(0, 1).Value = "found"
NotFound:
Sheets(ActiveSheet.Index + 1).Select
Selection.Offset(1, 0).Select


Next

Sheets(ActiveSheet.Index - 1).Select
Range("P1").Select
For counter2 = 1 To r
If ActiveCell.Value = "" Then Selection.EntireRow.Delete
Selection.Offset(1, 0).Select

Next

Cleanup:

Range("P1:P10000").Value = ""

End Sub
然而,这是相当丑陋和低效的代码。 Lmk,如果有需要改变的东西!

答案 1 :(得分:1)

我会这样做:

dataWithURL

它没有经过测试,但应该像这样工作。

编辑:我认为你必须按正确的顺序放置工作表。我想我把它们混在一起。