2016-11-24 102 views
0

我有2张:在第一次我有日期和在sheet2我有名单列A列。我想从第一张表中删除列O中没有名称的所有行。代码只是删除第一张表中的所有内容。欢迎任何帮助。删除行,如果单元格值不在列表

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 
+1

它适用于我 – arcadeprecinct

+0

和@arcadeprecinct一样 – Limak

回答

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 

但是,它是相当丑陋和低效的代码。如果有什么需要改变的话

1

我会做这样的:

Dim i as integer 
dim x as integer 
Dim rngSearch as Range 
Dim strName as String 
Dim ws1 as Worksheet 
dim ws2 as Worksheet 

Set ws1 = Thisworkbook.worksheets(1) 
Set ws2 = Thisworkbook.worksheets(2) 

x = ws1.cells(ws1.rows.count,1).end(xlup).row 
for i = 2 to x 
    strName = ws1.cells(i, 1) 
    set rngSearch = ws2.columns(15).find(strName) 
    if rngSeach is nothing then 
      ws1.rows(i).entirerow.delete 
      i = i-1 
    end if 
next i 

这不是测试,但它应该像这样工作。

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

相关问题