循环遍历每列并删​​除“0”列

时间:2015-06-05 18:02:09

标签: excel vba excel-vba

我没有收到任何错误,但它没有删除带有“0”的列。我只想删除有很多0的列,因为你可以从我的代码中读取。我不确定会出现什么问题,所以欢迎任何建议。

Sub Finalize()
Dim finalform As Worksheet
Dim deletename As String
Dim finalworkbook As Workbook
Dim ws As Worksheet
Dim copyrange As Range
Dim columnloop As Range

Application.DisplayAlerts = False
Application.ScreenUpdating = False

Set finalform = Workbooks(ActiveWorkbook.Name).ActiveSheet

For a = 3 To 18

If Range("B" & a).Value <> "" Then
    Workbooks.Open finalform.Range("B" & a).Value
    Set finalworkbook = Workbooks(ActiveWorkbook.Name)

        'Delete sheets
        For b = 3 To 12
        deletename = finalform.Range("D" & b).Value
        If deletename <> "" Then
        finalworkbook.Worksheets(deletename).Delete
        End If
        Next b

        'Find, replace, remove
        For Each ws In ActiveWorkbook.Worksheets

            'Copy paste values
            Set copyrange = ws.Cells
            copyrange.Copy
            copyrange.PasteSpecial xlPasteValues
            Application.CutCopyMode = False

            'Delete columns with 0
            For Each columnloop In copyrange.Columns
            d = 0
                For c = 1 To 35
                If Cells(c, columnloop.Column).Value = "0" Then
                d = d + 1
                End If
                Next c
            If d > 5 Then
            columnloop.Delete
            End If
            Next columnloop

        Next ws
End If
Next a

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub

1 个答案:

答案 0 :(得分:3)

您的循环可以用更有效的计数方法替换。在删除行或列时,应始终从扩展区开始,并向A1工作,以便在下一次递增期间不跳过列。

Dim c As Long, ws As Worksheet

'Find, replace, remove
For Each ws In ActiveWorkbook.Worksheets
    With ws
        .UsedRange.Cells = .UsedRange.Cells.Value
       'Delete columns with 0
        For c = .UsedRange.Columns.Count To 1 Step -1
            If Application.CountIf(.Columns(c), 0) > 5 Then
                .Columns(c).EntireColumn.Delete
            End If
        Next c

    End With
Next ws

还有其他几个方面可以调整。一旦达到运营标准,请考虑将其发布到Code Review (Excel)以进行进一步改进。