如果声明包含<>条件不起作用

时间:2016-05-17 01:28:38

标签: excel vba excel-vba

我遇到此代码的问题,即使不满足IF条件,列仍会显示:

protected $redirectRoute = route('account.settings') . '#general';

代码循环遍历列,仅显示值> gt的列0.我不知道问题是If CBool(Application.WorksheetFunction.CountIf(.Columns(j), "<>0"))还是j条件本身。我想要一些帮助,因为我真的需要这个代码用于我的excel,因为它将更容易和有用的分析!谢谢。

CBool

2 个答案:

答案 0 :(得分:1)

WorksheetFunction.CountIf将返回满足给定条件的单元格数。您将 count 转换为布尔值 - 对于任何非零结果,将评估为True

您需要将该计数与某事进行比较,例如> 0生成布尔表达式(然后您可以移除CBool)以达到预期效果。

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

但是,如果有任何非零整数转换为True ,则此代码是等效的(虽然不太清楚它在做什么):

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

因此,这种情况不是问题。

您需要在循环之前放置一个断点( F9 ),运行代码,然后单步执行( F8 )以查看正在进行的操作。问题可能在于对您的特定工作表数据使用WorksheetFunction.CountIf

答案 1 :(得分:1)

如果CountIf函数不等于0,则会在该范围内计算ANYTHING(包括空白单元格),这将导致您的

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的列,但仍然可以说明列中可能包含的任何空格(或其他)。