通过公式或 UDF 定义命名范围

Posted

技术标签:

【中文标题】通过公式或 UDF 定义命名范围【英文标题】:Defining Named Range by Formula or UDF 【发布时间】:2019-03-19 19:02:22 【问题描述】:

我想问一下您在 Excel 中定义命名范围的经验。

我通常使用这个公式:

=OFFSET(Sheet!$A$1;0;0;COUNTA(Sheet!$A:$A);COUNTA(DATA!$1:$1))

这适用于动态范围。一旦您将行或列添加到原始表,它就会修改。在这种情况下,一旦在 A 列或第 1 行的表之外输入了一些数据,就会出现问题。

然后我认为 UDF 中的 Range("A1").CurrentRegion.Address 可以完成这项工作。但是这个命令在 UDF 中被跳过了......因为它不仅仅适用于包含公式的单元格,我猜。

有人使用更强大的公式或 UDF 吗?

【问题讨论】:

在表外输入一些数据就会出现问题什么问题? 有许多帖子详细介绍了查找“最后一个单元格”的各种方法以及每种方法的优点和注意事项。 使用另一列或另一行进行计数,限制A列表格下方的信息输入或在第1行右侧添加信息 【参考方案1】:

这样的事情可能会起作用,但取决于工作表上没有“干扰”内容:

' "rng" is the top-left corner of the table you want to return
Function FullTable(rng As Range) As Range
    Dim lastCol As Long, lastRow As Long

    With rng.Parent
        lastRow = .Cells(.Rows.Count, rng.Column).End(xlUp).Row
        lastCol = .Cells(rng.Row, .Columns.Count).End(xlToLeft).Column
        Set FullTable = .Range(rng, .Cells(lastRow, lastCol))
    End With

End Function

【讨论】:

这在 VBA 代码中效果很好,但是如果我使用这个公式在 Excel 中定义一个命名范围,那么我在立即窗口中运行它我得到这个结果:? Range("table").address $A$1:$XFC$1048570 如果我用 Refers To 将命名范围“MyTable”定义为 =FullTable(Sheet1!$A$1)(Sheet1 上的范围 A1:F12 包含内容),然后在即时窗格中 ? Range("MyTable").Address给出输出$A$1:$F$12

以上是关于通过公式或 UDF 定义命名范围的主要内容,如果未能解决你的问题,请参考以下文章

r/dplyr:在 UDF 中使用动态命名的变量

如何将条件格式应用于命名范围?

将多维数组传递到 VBA 中的 Excel UDF

范围内每个数字的 SQL 计数总计(编辑:通过 UDF)

在 VBA Excel 2007 中使用命名范围

用于评估表示公式的文本字符串的 UDF