我希望 Excel 中命名范围的名称是动态的(而不是范围本身!)。我想知道是否/如何使用公式或引用单元格定义范围名称,以便当引用单元格的内容更改时名称也会更改。
例如如果我在一列中写一个列表,并将列表的标题写在列的顶部,如下所示:
A
1 *Colours*
2 Red
3 Yellow
4 Blue
然后根据列表标题(A1)命名列表的单元格区域(A2:A4),然后我希望如果列表标题发生变化,范围名称也会自动更改(即,范围名称 = A1,如果 A1 的内容发生变化,名称也会更改)。
额外信息关于我的具体情况:我使用命名范围在供其他人使用的 Excel 电子表格中创建几个依赖和动态下拉列表。一切都设置好了,如果用户想要将项目添加到现有列表(在支持列表工作表中),则下拉列表(在主表工作表中)会自动更改。但是,我的下一个挑战是让用户轻松添加新列表。我的计划是提供已经设置的备用列表列(在支持列表工作表中),以便在填写时它会自动变成下拉列表(在主表工作表中)。所有数据验证公式(使用命名范围)都设置为在主表工作表中创建下拉列表,缺少的步骤是用户输入新列表标题后自动命名列表范围。我的数据验证公式需要使用命名范围,因为主表中显示的下拉列表取决于用户之前的选择。
如有任何提示我将非常感激!
答案1
这假设 A1 中的值将被输入而不是通过公式设置。在工作表代码区域中输入以下事件宏:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim str As String
str = Range("A1").Text
If Intersect(Range("A1"), Target) Is Nothing Then Exit Sub
Dim n As Name
For Each n In ActiveWorkbook.Names
If n.RefersTo = "=Sheet1!$A$2:$A$4" Then
n.Delete
End If
Next n
ActiveWorkbook.Names.Add Name:=str, RefersTo:="=Sheet1!$A$2:$A$4"
End Sub
因为它是工作表代码,所以非常容易安装和自动使用:
- 右键单击 Excel 窗口底部附近的选项卡名称
- 选择查看代码-这将打开一个 VBE 窗口
- 粘贴内容并关闭 VBE 窗口
如果您有任何疑虑,请首先在试用工作表上尝试一下。
如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除宏:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
要了解有关事件宏(工作表代码)的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/event.htm
必须启用宏才能使此功能起作用!
编辑#1:
要使用 A1 和 B1 作为名称,只需替换:
str = Range("A1").Text
和:
str = Range("A1").Text & Range("B1").Text