1

我想删除工作表中符合以下条件的所有列:

  • 第 1 行 = “foobar”
  • 第 2-1000 行为空

这听起来很简单,但我还没有设法让它充分发挥作用。任何帮助将不胜感激。

谢谢!

4

2 回答 2

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
于 2012-05-22T16:48:29.647 回答
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 编辑​​:添加了一个缺失的空格]

于 2012-05-22T16:29:23.107 回答