使用 COUNTIFS 的用户定义间接函数

User Defined Indirect Function with COUNTIFS

我正在尝试创建一个 UDF 来替换在 COUNTIFS 函数中使用的 INDIRECT 函数以允许动态范围。

目标:

当前:

=countifs(indirect([cell reference to named range],[criteria1]...) 

我正在努力实现:

=countifs(INDIRECTVBA([cell reference to named range],[criteria1...)

目前函数returns#VALUE。

这是我的 VBA:

Public Function INDIRECTVBA(ref_text As String)
    INDIRECTVBA = Range(ref_text)
End Function

ref_text 参数将引用一个单元格,其中 VLOOKUP 根据用户在别处的选择动态列出命名范围。

我的第一个猜测是数据类型不匹配,但我没有想法。

感谢任何帮助!

谢谢, 乔丹

您 return 是变体值而不是范围。

这会产生错误,因为 CountIf 在其第一个参数中期望范围而不是变量值。

如果您想 return 一个范围,请将 As Range 添加到您的函数声明中并使用 Set 语句。

Public Function INDIRECTVBA(ref_text As String) As Range
    Set INDIRECTVBA = Range(ref_text)
End Function

因为您省略了 Set,编译器将其解释为 Let 语句。如果函数声明中没有 As Range,则默认为 As Variant。因此该函数正在检索范围内的值而不是 returning 范围本身(范围对象在 Let 语句中默认给出它们的 Range.Value 属性)。

我没有受过太多 CS 教育,所以这个答案可能不准确。当人们纠正我时,我真的很感激学到更多。