如果包含<>的条件不成立

我遇到了这个代码问题,尽pipe不符合IF条件,列仍然显示:

If CBool(Application.WorksheetFunction.CountIf(.Columns(j), "<>0"))

代码循环遍历列,只显示值大于0的列。我不知道问题是与jCBool条件本身。 我想要一些帮助,因为我真的需要这个代码为我的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对您的特定工作表数据。