Вопрос по excel, vba – Как я могу использовать VBA для удаления всех пустых столбцов, кроме определенного заголовка?

1

Я хотел бы удалить все столбцы на листе, которые соответствуют следующим критериям:

row 1 = "foobar" rows 2-1000 are empty

Это звучит достаточно просто, но мне не удалось заставить его работать полностью. Любая помощь будет высоко ценится.

Спасибо!

Если ваши данные имеют заголовки, вы можете использовать автофильтр для удаления пустых ячеек. Siddharth Rout
"но мне не удалось заставить его работать полностью" - отредактируйте свое сообщение с кодом, который вы пробовали. Затем мы можем помочь вам исправить то, что он не работает. Scott Holtzman

Ваш Ответ

2   ответа
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: добавлено пропущенное место]

Error: User Rate Limit Exceededifr.Rows(1)Error: User Rate Limit Exceededif r.Rows(1)Error: User Rate Limit Exceeded seegoon
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededozgrid.com/forum/showthread.php?t=26509
4

TRIED AND TESTED).

Я предполагаю, что 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
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded seegoon

Похожие вопросы