【问题标题】:User Defined Indirect Function with COUNTIFS使用 COUNTIFS 的用户定义间接函数
【发布时间】:2022-01-11 20:07:05
【问题描述】:

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

目标:

当前:

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

我正在努力实现:

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

该函数此时返回#VALUE。

这是我的 VBA:

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

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

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

感谢任何帮助!

谢谢, 约旦

【问题讨论】:

    标签: excel vba user-defined-functions countif


    【解决方案1】:

    您返回的是 Variant 值而不是 Range。

    这会产生错误,因为CountIf 在其第一个参数中期望的是 Range 而不是 Variant 值。

    如果您想返回一个范围,请将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。因此,该函数正在检索 Range 内的值,而不是返回 Range 本身(Range 对象在Let 语句中默认提供其Range.Value 属性)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-11
      • 2019-01-08
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      • 2011-03-21
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多