命名范围的名称可以是动态的吗?

命名范围的名称可以是动态的吗?

我希望 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

因为它是工作表代码,所以非常容易安装和自动使用:

  1. 右键单击 Excel 窗口底部附近的选项卡名称
  2. 选择查看代码-这将打开一个 VBE 窗口
  3. 粘贴内容并关闭 VBE 窗口

如果您有任何疑虑,请首先在试用工作表上尝试一下。

如果您保存工作簿,宏将随之保存。如果您使用的是 2003 以后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除宏:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 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

相关内容