从Stack Exchange应用程序发布此内容,如果格式有点偏离,请原谅我。
基本上,我想做一些非常简单的事情。我有一个包含一些数据的电子表格。标题是第一行。我想遍历列并删除那些列中所有行的值都为零的列。如果任何值非零,则列必须保留。
任何人都可以建议一种简洁易读的方法。我想尽量避免循环,寻找紧凑而优雅的东西。
谢谢
答案 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
检查每一列,如果第一行下面的所有单元格都包含零或空格,则删除该列。