我在使用此代码时遇到问题,尽管不满足 IF 条件,但列仍然显示:
If CBool(Application.WorksheetFunction.CountIf(.Columns(j), "<>0"))
代码循环遍历列,仅显示值 > 0 的列。我不知道问题是否出在 j
上。或使用 CBool
条件本身。我需要一些帮助,因为我确实需要这段代码用于我的 Excel,因为这样分析起来会更容易、更有用!谢谢。
Sub TestPasteColumnData3()
Dim lastcol As Long
Dim j As Long
With Worksheets("WF - L12 (3)")
lastcol = .Cells(5, Columns.Count).End(xlToLeft).Column
For j = 3 To lastcol
'change >0 to <>0 and 3 to j
If CBool(Application.WorksheetFunction.CountIf(.Columns(j), "<>0")) Then
.Columns(j).Copy Destination:=Worksheets("Sheet 1").Columns(j) 'Dont delete, this code works
Else
MsgBox ("No Value")
Exit Sub
End If
Next
End With
MsgBox ("Done")
End Sub
最佳答案
如果 CountIf 函数不等于 0,则该函数将计算范围内的任何内容,包括空白单元格,这将导致您的
CBool(Application.WorksheetFunction.CountIf(.Columns(j), "<>0"))
如果除了全 0 的列(没有空格)之外还有其他内容,则为 TRUE
你可以尝试一下
If Application.WorksheetFunction.Sum(.Columns(j)) > 0 Then
.Columns(j).Copy Destination:=Worksheets("Sheet 1").Columns(j) 'Dont delete, this code works
Else
MsgBox ("No Value")
Exit Sub
End If
这将为您提供任何包含大于 0 的值的列,但仍会考虑该列中可能存在的任何空白(或其他情况)。
关于vba - 包含 <> 的 if 语句无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37265699/