【问题标题】:Data Validation, Complex, based on another sheet数据验证,复杂,基于另一张工作表
【发布时间】:2018-06-10 16:38:50
【问题描述】:

样本表here

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

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

样本验证要求:

  1. 如果对应的 DataTemplate 值 == -500 那么单元格必须为空白
  2. 如果对应的 DataTemplate 值 == -200 那么单元格必须为空白或正数
  3. 如果对应的 DataTemplate 值 > 0,则单元格必须是 0..1 之间的数字或 [ "A", "B", "C" ] 中的字符串

我已经使用如下公式进行了尝试,但除了网络上非常简单的验证之外,我无法进行任何工作。

=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)

编辑;感谢 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. 与条件格式类似,似乎验证了整个(应用的)范围,而不仅仅是更新的单元格。有一个(后台活动进度条)滞后(范围约 2 秒(1000 行,15 列) - 所以在大范围内谨慎使用。@Google 可以让它更智能吗?

【问题讨论】:

  • IsNumber 即使对于 0 或负数也是正确的。将 IsNumber(D11) 替换为 And(IsNumber(D11),D11>0)。另外,我认为最后一个 OR 很难阅读。案例应该就像我刚刚做的那样,结果应该像(假设浮点不是问题) OR(AND(D11>0,D11
  • 但我不确定 switch 是否可以处理您的规则 3(尽管可能是的,因为它似乎是您的默认情况),这意味着我刚才建议的部分内容已关闭,抱歉。即使丑陋,在这里嵌套一些 =IF 可能会更好。
  • 另外,IsNumber 需要将数字格式化为数字。你的 122 不是。
  • 一旦将数字格式化为数字,以下应该可以工作:=SWITCH(DataTemplate!B11,-500,ISBLANK(B11),-200,OR(IsBlank(B11),AND(IsNumber( B11),B11>0)),OR(NOT(AND(IsNumber(DataTemplate!B11),DataTemplate!B11>0)),AND(B11>0,B11
  • 我的测试数据在 B11。你可能想要 D11

标签: google-sheets


【解决方案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. 与条件格式类似,似乎验证了整个(应用的)范围,而不仅仅是更新的单元格。有一个(后台活动进度条)滞后(范围约 2 秒(1000 行,15 列) - 所以在大范围内谨慎使用。@Google 可以让它更智能吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-29
    • 2018-06-10
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多