我遇到此代码的问题,即使不满足IF条件,列仍会显示:
protected $redirectRoute = route('account.settings') . '#general';
代码循环遍历列,仅显示值> gt的列0.我不知道问题是If CBool(Application.WorksheetFunction.CountIf(.Columns(j), "<>0"))
还是j
条件本身。我想要一些帮助,因为我真的需要这个代码用于我的excel,因为它将更容易和有用的分析!谢谢。
CBool
答案 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的列,但仍然可以说明列中可能包含的任何空格(或其他)。