当取一列的和时,区分'Null'和'0'

我试图区分没有input或“空”和input的东西,包括数字0

我写了一个名为“ZeroToAppear”的公共函数,当与索引匹配函数一起使用时,通过返回数字0作为string可以工作得很好,但是它不能与财务预算中常见的求和函数一起工作:

 Public Function ZeroToAppear(x As Variant) As Variant If IsNull(x) Then ZeroToAppear = Null ElseIf x = 0 Then ZeroToAppear = CStr(x) Else ZeroToAppear = x End If End Function 

我已经合理化的问题是,Excel自动将null视为0以避免ArgumentNullExceptions。

所以我想写另一个macros,将采取一个范围的总和,可以区分无input和0或更大的input,因为没有input的单元格的总和自动等于零在Excel中,我希望它报告空或甚至更好地报告虚假,为了不完成这笔款项。

我已经开始编写一个函数来testing每个单元格的范围,我将总结这个单元格是否为空,错误或其他。 如果它为空或错误,我希望它报告null到一个testing数组。 如果还有其他input,我希望它报告input到testing数组中的任何内容。 然后,我想确定是否整个testing数组报告为空,使我原来的function是假的,而不是运行在我testing范围内的总和,但如果有其他值,那么函数应该返回true和总和可以运行。

 Public Function NullOrErrorFalse() As Variant Dim arrOutput() As Variant ReDim arrOutput(n) As Variant n = 0 For Each cell In NullOrErrorFalse() If IsNull(cell) Then arrOutput(n) = Null ElseIf IsError(cell) Then arrOutput(n) = Null Else arrOutput(n) = cell.Value End If n = n + 1 Next cell Sub test(arrOutput()) If arrOutput() = Null Then NullOrErrorFalse = False Else NullOrErrorFalse = True End If End Sub End Function 

在这一点上,我的函数将不能正确编译和新的VBA和一般编程,我不知道如果我的问题是误用或语法或操作的顺序。

是的,由于误解VBA语法而导致编程缺陷。

 Public Function NullOrErrorFalse() As Variant Dim arrOutput() As Variant .... For Each cell In NullOrErrorFalse() 

NullOrErrorFalse是函数的名称,而不是您正在检查的参数。 改变它时,实际上是在改变结果。 另一方面,你需要为你的函数提供它将检查的参数(范围)。

您可以通过这种方式将自定义总和作为用户定义函数(UDF):

 Public Function SumOrNull(r As Range) As Variant SumOrNull = 0 For Each cel In r If IsError(cel) Or cel = "" Or Not IsNumeric(cel.Value) Then SumOrNull = CVErr(xlErrValue) Exit Function End If SumOrNull = SumOrNull + cel.Value Next End Function 

这个想法是,只要有任何你不想要的模式,你的UDF就会产生一个错误,所以Excel显示#Value ,而使用你的UDF的单元被认为是错误的。