将字符串转换为布尔运算符(<,< =,>,> =)

时间:2012-08-24 09:36:28

标签: excel casting excel-formula boolean-expression

在单元格A1中,可以有<<=>>=(字符串)。

在单元格B1中,存在阈值的int值。

A3开始,有一些int值。

+---+-----+----+
|   | A   | B  |
+---+-----+----+
| 1 | <   | 15 |
| 2 |     |    |
| 3 | 10  |    |
| 4 | 20  |    |
| 5 | ... |    |
+---+-----+----+

A3中的值应该在B3中复制,当且仅当它尊重布尔运算符(A1)和阈值(B1)时。否则,B3应为#N/A。当然,A4 / B4A5 / B5等也一样。

在该示例中,B3应为10B4应为#N/A,因为10小于15,但20不是。

这是我创建的一个很有效的公式,但有点长(这适用于B3):

=IF($A$1 = "<"; IF($A3 < $B$1; $A3; NA()); IF($A$1 = "<="; IF($A3 <= $B$1; $A3; NA()); IF($A$1 = ">"; IF($A3 > $B$1; $A3; NA()); IF($A3 >= $B$1; $A3; NA()))))

以更加消化的方式相同:

=IF(
    $A$1 = "<";
    IF($A3 < $B$1;$A3; NA());
    IF(
        $A$1 = "<=";
        IF($A3 <= $B$1; $A3; NA());
        IF(
            $A$1 = ">";
            IF($A3 > $B$1; $A3; NA());
            IF($A3 >= $B$1; $A3; NA())
        )
    )
)

有没有更方便的方法来完成这项工作?从字符串转换为运算符会很棒,但是,我不知道任何编程语言能够做这样的事情:)理想情况下,它应该像=IF($A3 $A$1 $B$1; $A3; NA()) ...

2 个答案:

答案 0 :(得分:4)

试试这个公式

=IF(COUNTIF(A3,$A$1&$B$1),A3,NA())

答案 1 :(得分:1)

请注意,这完全基于this article,但它似乎适合此处。有两种方法可以做到:使用命名范围和UDF。这两种方式基本上都利用了Excel的“隐藏”EVALUATE功能。

命名范围

要使用命名范围,您可以定义一个名称(在本例中,我使用Compare)并为其指定以下值(请注意,这是相对于我的工作表中的范围,因此您可能需要调整):

=EVALUATE("IF(" & A3 & $A$1 & $B$1 &"," & A3 & ",NA())")

请注意,范围似乎会自动更新,并以工作表名称为前缀。

enter image description here

<强> UDF

将以下内容添加为UDF:

Function Evalu(ByVal S As String) As String
  Evalu = Evaluate(S)
End Function

然后输入以下公式:

=INT(IFERROR(Evalu("IF(" & A3 & $A$1 & $B$1 &"," & A3 & ",NA())"),NA()))

NA()有点hacky,但是Evalu函数返回#VALUE错误而不是#N / A,所以这会笨拙地强制你想要的错误。此外,该函数返回一个字符串,因此您需要将结果转换为整数。我有点喜欢第一种方法:)

enter image description here

相关问题