使用 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 教育,所以这个答案可能不准确。当人们纠正我时,我真的很感激学到更多。
我正在尝试创建一个 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 教育,所以这个答案可能不准确。当人们纠正我时,我真的很感激学到更多。