通过公式或 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 定义命名范围的主要内容,如果未能解决你的问题,请参考以下文章