【发布时间】:2018-06-10 16:38:50
【问题描述】:
样本表here。
有 2 张; DataTemplate 存储验证键,DataValidation 是应包含基于所述键的数据验证的工作表。
例如:DataValidation!B11:E17 已针对 DataTemplate!B11:E17 进行验证(请参阅示例)
样本验证要求:
- 如果对应的 DataTemplate 值 == -500 那么单元格必须为空白
- 如果对应的 DataTemplate 值 == -200 那么单元格必须为空白或正数
- 如果对应的 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|")))))
)
提示:
- 无法验证 NOT(ISBLANK()),因为(看起来)只有在输入数据时才会触发验证。
- 与条件格式类似,似乎验证了整个(应用的)范围,而不仅仅是更新的单元格。有一个(后台活动进度条)滞后(范围约 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