数据验证中的动态名称管理器和间接功能

时间:2013-12-05 19:46:15

标签: excel validation

我真的遇到了使用excel宏和命名范围的问题。 我使用公式

为命名管理器提供动态公式
=OFFSET('Sheet1'!$A$2,0,0,COUNTA('Sheet1'!$A$2:$A$1000),1)

名称的数据验证应用于Sheet2上的Col A.现在应该根据Col A中选择的值填充Col B值。所以我使用间接功能使用数据验证:

=IF(A1="","",INDIRECT(A1))

当我使用动态命名范围

时,此功能无效
=OFFSET('Sheet1'!$B$2,0,0,COUNTA('Sheet1'!$B$2:$B$1000),1)

但如果范围是直接的,则有效。我真的希望它能够动态地工作。有谁能请我为此解决这个问题?非常感谢你的时间。

2 个答案:

答案 0 :(得分:0)

你提到这一行:

=IF(A1="","",INDIRECT(A1))

无效,因为“”不是数据验证的有效列表。所以这是一个错误。要完成这项工作,您需要创建2个新名称。我在下面列出了我使用的内容,但您可以根据自己的目的更改名称。

  • 名称1:rng_ChangeSelection
  • 指:=“更改选择”
  • 名称2:list_datavalidation
  • 指:= IF(Sheet1!$ A $ 1 =“”,rng_ChangeSelection,INDIRECT(Sheet1!$ A $ 1))

然后在数据验证来源中输入

=list_datavalidation

这将引用输入数据验证源时出现问题的公式。

数据验证对您可以执行的操作有一些限制,但命名范围可以绕过这些限制。现在,当A1为空时,验证列表会说他们需要更改选择(您可以根据需要编辑消息)。如果它不是空白,它将使用列表(如果它不存在),如果它没有退出,将没有可供选择的列表。

我还建议添加一些条件格式,以便在用户没有正确输入内容时直观地标记用户。

答案 1 :(得分:0)

我还发现INDIRECTOFFSET的组合不起作用。这很烦人,好像我们有一个动态大小的命名范围(使用OFFSETINDEX),然后我们不能通过INDIRECT引用它 - 而是我们得到#REF错误。

我推测的原因是对INDIRECT的调用解析为命名范围的公式,然后无法评估。

所以你的电话会归结为:

=IF(A1="","",INDIRECT("RangeName"))

我推测RangeName将在命名范围公式中替换为:

=IF(A1="","",INDIRECT("OFFSET('Sheet1'!$B$2,0,0,COUNTA('Sheet1'!$B$2:$B$1000),1)")

会产生#REF错误,因为INDIRECT无法解析公式。 我不能想到一个选项之后不会使用宏(或至少使用EVALUATE技巧,但仍然需要你的工作簿启用宏)。