2014-02-06 41 views
3

所以基本上我有一个代码,旨在查找和删除行,如果他们有两列满足特定条件。但是,这些列在表中的位置通常是可变的,所以我需要使用它们的表头名称引用这两列。我有一种方法来使用列号来查找和删除这些行,但将它适配到列名称的方式不同。我如何调整我的代码以使其工作?我可以使用FIND函数吗? 在此先感谢!VBA:如何引用使用表标题的列,以便我可以在单元格引用中使用该列

代码:

1 Sub try() 
2  
3 ThisWorkbook.Sheets("report").Activate 
4 Last1 = Cells(Rows.Count, "A").End(xlUp).Row  
5 For p = Last1 To 1 Step -1 
6 If (Cells(p, "Table1[type]").Text) = "active" And (Cells(p, "Table1[data]")) <> "" Then 
7  Cells(p, "A").EntireRow.Delete 
8 End If 
9 Next p 
10 End Sub  

回答

8

试试这个:

Sub try() 
    Dim Last1 As Long 
    Dim colType As Integer, colData As Integer 

    With ThisWorkbook.Sheets("report") 
     Last1 = .Cells(.Rows.Count, "A").End(xlUp).Row 
     colType = .Range("Table1[type]").Column 
     colData = .Range("Table1[data]").Column 
     For p = Last1 To 1 Step -1    
      If .Cells(p, colType) = "active" And .Cells(p, colData) <> "" Then 
       .Cells(p, "A").EntireRow.Delete 
      End If 
     Next p 
    End With 
End Sub 

顺便说一句,如果你的表有很多行,下面的代码会更有效:

Sub test2() 
    Dim rng As Range 
    Dim i As Long 

    With ThisWorkbook.Sheets("report").ListObjects("Table1") 
     .Range.AutoFilter 
     .Range.AutoFilter Field:=.ListColumns("type").Index, _ 
      Criteria1:="=active" 
     .Range.AutoFilter Field:=.ListColumns("data").Index, _ 
      Criteria1:="<>" 
     .Range.Offset(1).EntireRow.Delete 
     .Range.AutoFilter 
    End With 
End Sub 
+1

,完美的工作谢谢!我觉得这是类似的东西,但我不知道如何维度我的列,因为由于Dim空白,因为列不是一个东西。 – SRoy

+0

@SRoy,看我更新的答案。如果你的表格包含很多行,那么会有更高效的代码:) –

+0

非常感谢编辑的代码对于我拥有的大量数据来说非常快,但唯一的问题是如果没有任何东西需要删除或者任何匹配那些特定的条件,我一直在“For i = rng.Areas ...”行中出现错误。有关如何摆脱它的任何建议? – SRoy

相关问题