【问题标题】:Is OR function in Excel validations broken?Excel 验证中的 OR 函数是否损坏?
【发布时间】:2017-09-08 12:52:59
【问题描述】:

我正在尝试在 Excel 中编写一个自定义验证函数,以确保单元格中的文本以 http://https:// 开头。如果我使用公式

=EXACT(LEFT(INDIRECT("Z"&ROW()), 8), "https://")

验证有效,但仅检查 https://。如果我添加这样的 OR

=OR(EXACT(LEFT(INDIRECT("Z"&ROW()), 8), "https://"), EXACT(LEFT(INDIRECT("Z"&ROW()), 7), "http ://"))

它不起作用;它总是评估为假。然后我尝试了以下方法来测试 OR 函数:

=OR(EXACT(LEFT(INDIRECT("Z"&ROW()), 8), "https://"), TRUE)

这也评估为 FALSE!我疯了还是 OR 函数坏了?我发现将这个方程粘贴到单元格中时效果很好。仅在用作自定义验证函数时不起作用。

【问题讨论】:

  • 不是问题,而是为什么在简单的输入Z3 或任何行号是验证的第一行时不必要地使用 voltile INDIRECT?
  • Excel 2016 给出“公式当前计算为错误,您要继续吗?”在那一个。像@ScottCraner 所说的那样删除INDIRECT 可以修复它(错误消息和公式逻辑)。
  • @ScottCraner 我使用了 INDIRECT() 和 ROW() 因为我希望选择整个列,然后对其应用此验证。
  • 然后改用$Z1。只要引用左上角单元格,Excel就会使相关部分正确迭代,不需要104万个易失公式。
  • 那行得通。仍然不确定为什么我最初的尝试没有奏效。

标签: excel logical-or


【解决方案1】:

如果有一天您需要包含第三个条件,请尝试如下:

=OR(LEFT(D1,8)="https://",
    LEFT(D1,7)="http://")

没有Exact() 也能正常工作。 如 cmets 中所述,If() 也不需要。

【讨论】:

  • 为什么不只是=OR( (LEFT(D1,8)="https://",1), (LEFT(D1,7)="http://",1)),因为这两个表达式都已经是布尔值了?
  • 我喜欢在公式中添加新行,这样看起来更好。 @user1016274
  • 我的意思是:你不需要 IF() 函数,因为表达式本身已经是一个布尔值。与换行无关。
  • @user1016274 - 我明白了你的意思,因此它确实好一点,你必须从公式中删除 1 并且它有效。因此,我编辑了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 2010-12-15
相关资源
最近更新 更多