数据validation中的dynamic名称pipe理器和间接函数

我真的坚持使用Excelmacros和命名范围的问题。 我使用公式为Named Manager提供dynamic公式

=OFFSET('Sheet1'!$A$2,0,0,COUNTA('Sheet1'!$A$2:$A$1000),1) 

名称的数据validation应用于Sheet2上的列A. 现在,Col B值应该根据Col A中select的值填充。所以我使用了使用数据validation的间接函数:

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

当我使用dynamic命名范围时,此function不起作用

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

但是,如果范围是直接的作品。 我真的希望这个dynamic工作。 任何人都可以请给我一个解决这个问题? 非常感谢您的时间。

你提到的这一行:

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

不工作,因为“”不是数据validation的有效列表。 所以这是抛出一个错误。 要做这个工作,你需要创build2个新的名字。 我在下面列出了我所使用的,但是您可以更改名称以适合您的目的。

  • 名称1:rng_ChangeSelection
  • 指的是:=“更改select”
  • 名字2:list_datavalidation
  • 指的是:= IF(Sheet1!$ A $ 1 =“”,rng_ChangeSelection,INDIRECT(Sheet1!$ A $ 1))

然后在数据validation的源代码中input

 =list_datavalidation 

这将引用input到数据validation源时出现问题的公式。

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

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