【问题标题】:Adding an OR Function to IF Statement在 IF 语句中添加 OR 函数
【发布时间】:2020-01-17 11:14:47
【问题描述】:

如何让这个公式搜索 567676342 而不仅仅是 567 它是此刻。

=IF(ISNUMBER(SEARCH(""*567*"",B:B)),""Traction"","""")

【问题讨论】:

  • 这是this问题的后续吗?如果是这样,明智的做法是声明您希望通过 VBA 完成此操作。

标签: arrays excel if-statement search excel-formula


【解决方案1】:

您可以使用OR 评估多个子句:

=IF(OR(ISNUMBER(SEARCH("567",B:B)),ISNUMBER(SEARCH("676",B:B)),ISNUMBER(SEARCH("342",B:B))),"Traction","")

使用OR 允许您指定两个或多个子句,如果其中任何为真,则返回true

=IF(OR(clause_1, clause_2, clause_3, etc.), true, false)

OR 函数记录在 here

【讨论】:

  • 这是一个漫长的过程,但不需要转置(并且会避免可能的混淆=))。赞成
【解决方案2】:

作为一个公式,你可以简单地试试:

=IF(SUM(--ISNUMBER(SEARCH({567;676;342},B:B)))>0,"Traction","")

我们必须使用分号来根据B:B 范围内的所有值评估数组中的每个元素。

注意1:这是一个CSE公式,需要通过CtrlShifterEnter

注意2:如果这确实是您上一个问题的后续,您需要这样输入:

<YourInputRange>.FormulaArray = "=IF(SUM(--ISNUMBER(SEARCH({""567"";""676"";""342""},B:B)))>0,""Traction"","""")"

或者,取决于您的Locale

<YourInputRange>.FormulaArray = "=IF(SUM(--ISNUMBER(SEARCH({""567"",""676"",""342""},B:B)))>0,""Traction"","""")"

注意 3: 根据我之前的回答,您正在比较数组公式中的整列。请注意,这会影响您的表现。我建议您的下一步是真正获得动态 Range 对象。


编辑

关于为什么我们需要TRANSPOSEB:B 列中的值或我们数组中的值的一个小解释。让我们想象一下B1:B3中的一些示例数据:

让我们专注于我们的公式; IF(SUM(--ISNUMBER(SEARCH({567,676,342},B1:B3)))&gt;0,"Traction","")。请注意我们目前如何比较两个垂直范围。所以基本上我们要求的公式可能如下所示:

>

答案是否定的!所以在这种情况下,结果将是""

现在让我们比较一个垂直数组和一个水平数组,我们的公式现在看起来像:=IF(SUM(--ISNUMBER(SEARCH({567;676;342},B1:B3)))&gt;0,"Traction",""),为了形象化,你可以想到一个矩阵:

我们的矩阵中有一个正匹配!现在因为这是比较两个数组,所以我们需要CSE 公式。这就是为什么我们宁愿有一个指定的范围,例如B1:B3,而不是完整的列引用。

【讨论】:

  • 我一直在考虑强制 SEARCH 一次搜索多个值。事实证明,所有的盐都是逗号和分号。那些需要在公式中用分号分隔参数的人必须做相反的事情 - 值数组必须用逗号分隔。
  • @basic,非常正确。在我个人的情况下,这些逗号将被转换为反斜杠。重点是创建一个矩阵,将水平数组与垂直数组进行比较。
  • 感谢您的解释 - 这解释了为什么 COUNT 在 ISNUMBER 不起作用时起作用。
【解决方案3】:

试试这个。 SEARCH 不需要通配符。

=IF(COUNT(SEARCH({"567","676","342"},B:B)),"Traction","")

【讨论】:

  • 那没有用。我也试过 =IF(ISNUMBER(SEARCH({""567"", ""676"", ""342""},B:B)),""Traction"","""")认为可能更接近,但仍然不起作用
  • 因为 "=IF(ISNUMBER(SEARCH({""567""},B:B)),""Traction"","""")" 有效,但我只需要添加在 676 和 342
  • 抱歉,没发现。我已经在上面进行了修改,它对我有用(没有双引号)。
  • 我点击了赞成票,但稍后意识到您并没有将数组中的所有值与B:B 列中的所有值进行比较 =) > =IF(COUNT(SEARCH({"567","676","342"},TRANSPOSE(B1:B3))),"Traction","") 会这样做。或者实际上:=IF(COUNT(SEARCH({"567";"676";"342"},B:B)),"Traction","")
  • 对不起,我有双引号,因为我将其作为宏输入 Sheets("Data").Range("I:I") = "=IF(ISNUMBER(SEARCH({""567 ""},B:B)),""牵引"","""")"
猜你喜欢
  • 2022-07-29
  • 1970-01-01
  • 2010-12-20
  • 2014-09-30
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-20
相关资源
最近更新 更多