在单元格A1
中,可以有<
,<=
,>
或>=
(字符串)。
在单元格B1
中,存在阈值的int值。
从A3
开始,有一些int值。
+---+-----+----+
| | A | B |
+---+-----+----+
| 1 | < | 15 |
| 2 | | |
| 3 | 10 | |
| 4 | 20 | |
| 5 | ... | |
+---+-----+----+
A3
中的值应该在B3
中复制,当且仅当它尊重布尔运算符(A1
)和阈值(B1
)时。否则,B3
应为#N/A
。当然,A4
/ B4
,A5
/ B5
等也一样。
在该示例中,B3
应为10
而B4
应为#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())
...
答案 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())")
请注意,范围似乎会自动更新,并以工作表名称为前缀。
<强> 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,所以这会笨拙地强制你想要的错误。此外,该函数返回一个字符串,因此您需要将结果转换为整数。我有点喜欢第一种方法:)