数据验证,复杂,基于另一张表

时间:2018-06-10 16:38:51

标签: google-sheets

样本表here

有2张; DataTemplate存储验证密钥,DataValidation是应包含基于所述密钥的数据验证的工作表。

例如:DataValidation!B11:E17针对DataTemplate进行验证!B11:E17(请参见示例)

样本验证要求:

  1. 如果对应的DataTemplate值== -500,那么Cell必须为空
  2. 如果同时响应DataTemplate值== -200则Cell必须为空或正数
  3. IF coressponding DataTemplate值> 0然后Cell必须是0..1之间的数字或[“A”,“B”,“C”]中的字符串
  4. 我使用下面的公式对此进行了测试,但除了网上提供的非常简单的验证之外,我还没有做任何工作。

    =SWITCH(INDIRECT("DataTemplate!D11:E17"),-500,ISBLANK(D11),-200,OR(ISNUMBER(D11),ISBLANK(D11),OR(ISNUMBER(D11),IFERROR(MATCH(D11,SPLIT("A,B,C",","),FALSE),FALSE)>0)
    

    EDIT;感谢Jeremy Kahan(下)。

    我的问题是,我试图将条件格式规则应用于条件验证,但显然它们在应用方面有很大不同(我相信)。例如:您可以直接访问其他工作表中的单元格,为正在应用的范围的左上角单元格编写正常公式。我的实际验证公式如下。

    =SWITCH(WorkArrivals!D11,
      -500,ISBLANK(D11),
      -400,ISBLANK(D11),
      -200,AND(NOT(ISBLANK(D11)),OR(AND(ISNUMBER(D11),D11>0,D11<1),NOT(ISERROR(SEARCH("|"&D11&"|","|absent|sick|annual|family|domtravel|inttravel|"))))),
      -100,OR(ISBLANK(D11),AND(ISNUMBER(D11),D11>0,D11<1),NOT(ISERROR(SEARCH("|"&D11&"|","|domtravel|inttravel|")))),
      AND(NOT(ISBLANK(D11)),OR(AND(ISNUMBER(D11),D11>0,D11<1),NOT(ISERROR(SEARCH("|"&D11&"|","|absent|sick|annual|family|domtravel|inttravel|")))))
    )
    

    提示:

    1. 无法验证NOT(ISBLANK()),因为(只显示)仅在输入数据时触发验证。
    2. 与条件格式类似,似乎验证了整个(应用的)范围,而不仅仅是已更新的单元格。有一个(背景活动进度条)延迟(范围约为2s(1000行,15列) - 因此在大范围内谨慎使用。@ Google可以使这更聪明?

1 个答案:

答案 0 :(得分:1)

谢谢Jeremy Kahan(下)。为了其他用户的利益;

我的问题是,我试图将条件格式规则应用于条件验证,但显然它们在应用方面有很大不同(我相信)。例如:您可以直接访问其他工作表中的单元格,为正在应用的范围的左上角单元格编写正常公式。我的实际验证公式如下。

=SWITCH(WorkArrivals!D11,
  -500,ISBLANK(D11),
  -400,ISBLANK(D11),
  -200,AND(NOT(ISBLANK(D11)),OR(AND(ISNUMBER(D11),D11>0,D11<1),NOT(ISERROR(SEARCH("|"&D11&"|","|absent|sick|annual|family|domtravel|inttravel|"))))),
  -100,OR(ISBLANK(D11),AND(ISNUMBER(D11),D11>0,D11<1),NOT(ISERROR(SEARCH("|"&D11&"|","|domtravel|inttravel|")))),
  AND(NOT(ISBLANK(D11)),OR(AND(ISNUMBER(D11),D11>0,D11<1),NOT(ISERROR(SEARCH("|"&D11&"|","|absent|sick|annual|family|domtravel|inttravel|")))))
)

提示:

  1. 无法验证NOT(ISBLANK()),因为(只显示)仅在输入数据时触发验证。
  2. 与条件格式类似,似乎验证了整个(应用的)范围,而不仅仅是已更新的单元格。有一个(背景活动进度条)延迟(范围约为2s(1000行,15列) - 因此在大范围内谨慎使用。@ Google可以使这更聪明?