循环遍历列并删除仅具有零的列

时间:2014-08-26 18:54:12

标签: excel excel-vba excel-2010 vba

从Stack Exchange应用程序发布此内容,如果格式有点偏离,请原谅我。

基本上,我想做一些非常简单的事情。我有一个包含一些数据的电子表格。标题是第一行。我想遍历列并删除那些列中所有行的值都为零的列。如果任何值非零,则列必须保留。

任何人都可以建议一种简洁易读的方法。我想尽量避免循环,寻找紧凑而优雅的东西。

谢谢

1 个答案:

答案 0 :(得分:1)

这不是太优雅"

Sub ColumnKiller()
    Dim N As Long, i As Long
    N = Cells(1, Columns.Count).End(xlToLeft).Column
    For i = N To 1 Step -1
        If Application.WorksheetFunction.Sum(Range(Cells(2, i), Cells(Rows.Count, i))) = 0 Then
            Cells(2, i).EntireColumn.Delete
        End If
    Next i
End Sub

修改#1

如果第一行下面没有否定值,则上述代码将起作用。如果较低的行可以包含负值,则应使用以下代码:

Sub ColumnKiller2()
    Dim N As Long, i As Long, wf As WorksheetFunction, Kount As Long
    Dim s1 As String, s2 As String
    s1 = "=0"
    s2 = "="
    Set wf = Application.WorksheetFunction
    N = Cells(1, Columns.Count).End(xlToLeft).Column
    For i = N To 1 Step -1
        Set r = Range(Cells(2, i), Cells(Rows.Count, i))
        Kount = wf.CountIf(r, s1) + wf.CountIf(r, s2)
        If Kount = Rows.Count - 1 Then
            Cells(2, i).EntireColumn.Delete
        End If
    Next i
End Sub

检查每一列,如果第一行下面的所有单元格都包含零或空格,则删除该列。