带有 count 的 UDF 总是返回 0,或者一个错误

Posted

技术标签:

【中文标题】带有 count 的 UDF 总是返回 0,或者一个错误【英文标题】:UDF with count always returns 0, or an error 【发布时间】:2021-02-24 09:57:34 【问题描述】:

所以,我有一个简短的 UDF,它接受一个表(作为范围)作为输入,并将行数作为输出返回。

Function CALCROW(mytable As Range) As Double
   Dim rowNumber As Double
   statement
   CALCROW = rowNumber
End Function

声明,我试过了

rowNumber = myTable.Rows.Count
rowNumber = myTable.Count
rowNumber = Application.WorksheetFunction.Count(myTable)

即使表格有 5 行,两者都给出 0。

我什至尝试过

rowNumber = myTable.Rows
rowNumber = Application.WorksheetFunction.Rows.Count(myTable)
rowNumber = Application.WorksheetFunction.Rows(myTable)

但对他们来说,我得到了#VALUE 错误。

我知道,如果我只想知道 excel 中的行数,我可以使用 =ROWS(myTable),但不是这样...

【问题讨论】:

rowNumber = myTable.Rows.Count 为我工作。 如何将表格传递给函数?另请注意,您的 3 次尝试计算的结果非常不同。 【参考方案1】:

其实如下代码(在一个模块中)

Option Explicit

Public Function CALCROW(mytable As Range) As Long
   CALCROW = mytable.Rows.Count
End Function

这是一个公式

=CALCROW(B1:G8)

给出8 这是正确的。除了B1:G8,您甚至可以提供一个命名范围或 ListObject 名称,这样就可以了。

请注意,行数只能是 Long 类型。

【讨论】:

@PeterN 实际上不,您的代码也可以工作(我的代码没有问题)。类型不是问题,但将其声明为 Double 没有任何意义,因为行号不能有任何小数(行 5.3 不存在)它们始终是整数。因此,Long 将是正确的类型(因为 Excel 的行数超过了Integer 的行数)。

以上是关于带有 count 的 UDF 总是返回 0,或者一个错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥变量_count总是返回-1?

SQL递归udf总是返回null

JSON .count 数组在 Swift 4 中总是返回 0

带有 UDF 的 PySpark 数据框

函数检查 (length (list) != 0) 总是返回 length = 0

MySQLi count(*) 总是返回 1