2012-05-22 36 views
1

我想刪除其中符合以下條件的工作表中的所有列:如何使用VBA刪除除特定標題外的所有空列?

  • 第1行=「foobar的」
  • 行2-1000是空

這聽起來很簡單但我還沒有設法讓它充分發揮作用。任何幫助將大規模讚賞。

謝謝!

+2

「但我還沒有設法得到它完全正常」 - 請編輯你已經嘗試了代碼您的文章。然後,我們可以幫助您解決它無法正常工作的問題。 –

+0

如果您的數據有標題,那麼您可以使用自動篩選器刪除空白單元格。 –

回答

3

dim col as Long, lastCol as Long, r as range 
lastCol = ActiveSheet.Usedrange.columns(Activesheet.Usedrange.columns.count).column 
for c=lastCol to 1 Step -1 
    set r = Range(Cells(1, c), Cells(1000, c)) 
    if r.Rows(1) = "foobar" Then 
     if WorksheetFunction.CountA(Range(r.Rows(2), r.Rows(r.Rows.Count))) = 0 then 
      Columns(c).delete 
     end if 
    end If 
next 

如何[編輯由OP:添加缺少空間]刪除行按照您的要求(久經考驗

+0

雖然您的解決方案很好,但它並不考慮顯示爲空白但不是的單元格,因爲它們的格式,註釋或結果爲零的公式......請參閱此頁以獲取更多信息http:// www.ozgrid.com/forum/showthread.php?t=26509 –

+0

OP確實說出了「空白」,所以我會提出類似這樣的建議。 –

+0

以上作品非常適合我的目的 - 謝謝!儘管如此,對第五行的小修改:'ifr.Rows(1)'應該是'if r.Rows(1)' - 缺少一個空格。 – seegoon

4

最快的方法。

我假設ROW1有列標題

Option Explicit 

Sub Sample() 
    Dim aCell As Range, rng As Range 
    Dim LastCol As Long, LastRow As Long, i As Long 

    With Sheets("Sheet1") 
     Set aCell = .Rows(2).Find(What:="foobar", LookIn:=xlValues, _ 
     Lookat:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False) 

     If Not aCell Is Nothing Then .Rows(2).Delete 

     LastRow = .Cells.Find(What:="*", _ 
        After:=.Range("A1"), _ 
        Lookat:=xlPart, _ 
        LookIn:=xlFormulas, _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlPrevious, _ 
        MatchCase:=False).Row 

     LastCol = .Cells.Find(What:="*", _ 
        After:=.Range("A1"), _ 
        Lookat:=xlPart, _ 
        LookIn:=xlFormulas, _ 
        SearchOrder:=xlByColumns, _ 
        SearchDirection:=xlPrevious, _ 
        MatchCase:=False).Column 

     Set rng = Range("A1:" & Split(Cells(, LastCol).Address, "$")(1) _ 
        & LastRow) 

     ActiveSheet.AutoFilterMode = False 

     For i = 1 To LastCol 
      rng.AutoFilter Field:=i, Criteria1:="" 
     Next i 

     rng.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete 

     ActiveSheet.AutoFilterMode = False 
    End With 
End Sub 
+0

對不起,沒有迴應。我正在尋找刪除列,而不是行 - 是上面會做什麼?謝謝。 – seegoon

+0

@seegoon:我可以修改上面的代碼以刪除列:)你能告訴我一個你的數據看起來如何的快照嗎?我猜想這只是一個改變。如果我能看到一個快照,那麼我可以檢查它... –

相關問題