2014-02-06 75 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

相關問題