如何将不连续的单元格传递给 Excel UDF

Posted

技术标签:

【中文标题】如何将不连续的单元格传递给 Excel UDF【英文标题】:How to pass non-contiguous cells to Excel UDF 【发布时间】:2013-01-24 22:59:41 【问题描述】:

在 myUDF 中,我可以引用“A1:A12”等一系列单元格,但如何引用“A1,B4,H3”等非连续单元格。 我用的是ExcelDNA,参数类型是object 但它似乎需要字符串和一系列单元格,而不是不连续的单元格

[ExcelArgument(AllowReference = true, Name = "Relations", Description = "a set of relations")]object rels

【问题讨论】:

你能展示你的尝试吗? @Tim,我尝试使用对象,如果我将字符串传递为“A1;B2”或“A1,B2”,当我单击编辑栏时,Excel 无法识别它们,只需处理它们作为一个字符串。我想要内置函数 SUM 之类的东西,当您选择不同的单元格并单击编辑栏时,所有引用的单元格都会突出显示,您可以选择不同的单元格。选择单元格后,公式会相应更改。 【参考方案1】:

听起来您正在从代码中将公式及其参数输入到工作表中,并且您希望用户随后能够在 Excel 的公式栏中正常编辑公式。对吗?

如果是这样,将参数括在括号中。例如,对于这样的 UDF...

Public Function MyUDF(my_param As Range)
    'concatenate all cell values in a non-contiguous range:
    Dim rgCell As Range, rgArea As Range
    For Each rgArea In my_param.Areas
        For Each rgCell In rgArea
            MyUDF = MyUDF & CStr(rgCell.Value)
        Next rgCell
    Next rgArea
End Function

...像这样在工作表单元格中输入它:

=MyUDF((A1,A3,A7:A11,C8:E10))

请注意,与使用 SUM 等内置函数相比,多了一组括号。

顺便说一句,您可能已经知道,在遍历非连续范围时,您必须遍历该范围的区域,然后遍历每个区域中的单元格;循环遍历范围内的单元格只会为您提供第一个区域中的单元格。

【讨论】:

以上是关于如何将不连续的单元格传递给 Excel UDF的主要内容,如果未能解决你的问题,请参考以下文章

如何根据单元格颜色获取 UDF 以在 Excel 中自动更新

如何使用 Excel 的数组公式为 UDF 正确读取每个单元格?

用于识别 Excel 单元格格式模式的 UDF(用户定义函数)

试图让 Excel UDF 自定义单元格格式不返回任何内容“(空单元格)”或“格式化的用户输入”

如何将单元格而不是单元格的值传递给 LibreOffice 函数?

自动计算与单元格属性相关的 Excel VBA UDF