使用此命名范围进行列表验证有什么问题?

时间:2012-10-03 20:59:32

标签: excel validation worksheet-function

我有一列数据会随着时间的推移添加更多值。我想在另一个工作表上使用此列的List验证值,以便下拉选项反映列的当前内容。我尝试使用以下公式创建命名范围ListColumn

=ADDRESS(3,12,1,1,"DataSource")&":"&ADDRESS(COUNTA('DataSource'!$L:$L),12,1,1,"DataSource") 

当我尝试为单元格添加验证时,选择允许:'列表'并在公式框中输入=ListColumn,我收到以下错误消息:

The list source must be a delimited list, or a reference to a single row or column.

我尝试将整个公式包装在INDIRECT()中,虽然在名称管理器屏幕上没有生成错误,但当我尝试添加验证时,我收到此错误消息:

The Source currently evaluates to an error.  Do you want to continue?

我不确定这里有什么问题。 ADDRESS()调用的第二个参数是相同的,因此范围地址应引用单个列。如何设置我正在寻找的动态列表验证?

编辑:调试这会产生一些奇怪的行为。当我尝试使用Range("ListColumn").Select选择ListColumn时,我不断收到运行时错误。消息是对象'_Global'的“方法'范围'失败。”

输入=ListColumn会返回'DataSource'!$L$3:'DataSource'!$L$65,这是预期值。

另外,当我输入公式=COUNTA(ListColumn)时,它返回“1”,但是当我输入公式=COUNTA('DataSource'!$L$3:'DataSource'!$L$65)时,它返回正确的值“63”。 =COUNTA(INDIRECT(ListColumn))也会返回“1”。

1 个答案:

答案 0 :(得分:2)

我认为问题可能是在第二个DataSource块中包含ADDRESS作为文本表名称。我得到了与执行上述步骤时完全相同的行为,但它似乎与此有关:

=INDIRECT(ADDRESS(3,12,1,1,"DataSource")&":"&ADDRESS(COUNTA(DataSource!$L:$L),12,1,1))

然后,您可以完全按照上面的操作进行操作,并在下拉列表中使用它。我最好的假设是,由于您已经在地址的第一部分中定义了工作表,因此您无需在第二部分中提供工作表(如果您这样做,则会导致错误)。如果你从程序的角度考虑它,它是有道理的(我认为:)),因为很难/不可能在多张纸上引用范围,因此语法可能不允许第二张纸在冒号后指定(即使它是相同的)。这只是猜想(可能是错误的),所以希望解决方案有效:)

enter image description here enter image description here