如果包含<>的条件不成立
我遇到了这个代码问题,尽pipe不符合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的列以外还有其他内容(没有空白)
你可以试试
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的列,但是仍然可以解释列中可能存在的空白(或其他)。
WorksheetFunction.CountIf
将返回满足给定条件的单元的计数 。 您将该计数转换为布尔值 – 对于任何非零结果,计算结果为True
。
您需要将该计数与例如> 0
进行比较,以产生布尔expression式 (然后您可以删除CBool
)以实现预期的结果。
If Application.WorksheetFunction.CountIf(.Columns(j), "<>0") > 0 Then
但是, 如果任何非零整数转换为True
,这个代码是等价的(虽然不太清楚它在做什么):
If CBool(Application.WorksheetFunction.CountIf(.Columns(j), "<>0")) Then
所以,这个条件不成问题。
您需要在循环之前放置一个断点( F9 ),运行代码并逐步执行( F8 )以查看正在发生的事情。 问题可能与使用WorksheetFunction.CountIf
对您的特定工作表数据。