2017-09-08 40 views
1

我试图在Excel中编写自定义验证函数,以确保单元格中的文本以http://https://开头。如果我使用式Excel验证中的OR函数是否被破坏?

= 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(EXACT(LEFT(INDIRECT( “Z” & ROW()),8), “HTTPS://”),TRUE)

并且这也评估为假!我疯了还是OR功能坏了?我发现当把这个方程粘贴到一个单元中时,它工作得很好。它仅用作自定义验证函数时不起作用。

+2

不是问题,但为什么当一个简单的把'Z3'或什么行数作为验证的第一行时,不必要的使用voltile INDIRECT? –

+1

Excel 2016提供了“公式当前评估为错误,您希望继续吗?”在那一个上。像@ScottCraner一样去除'INDIRECT'表示修复了它(错误信息和公式逻辑)。 – GSerg

+0

@ScottCraner我使用了INDIRECT()和ROW(),因为我希望选择整个列,然后对其应用此验证。 – PICyourBrain

回答

1

如果有一天你需要包括第三个条件,尝试这样的:

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

这将不Exact()工作。 正如在评论中指出的,If()也是不需要的。

+0

为什么不是'= OR( (LEFT(D1,8)=“https://”,1), (LEFT(D1,7)=“http://”,1))'已经是布尔? – user1016274

+0

我喜欢在公式中添加新的线条,看起来更好。 @ user1016274 – Vityata

+2

我的意思是:你不需要'IF()'函数,因为表达式本身已经是一个布尔值。不是关于换行符。 – user1016274