1

在 cellA1中,可以有<, <=, >or >=(of string)。

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

A3,有 int 的值。

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

当且仅当它尊重布尔运算符 ( ) 和阈值 ( ) 时,才A3应复制 in的值。否则,应该是。当然,对于/ ,/等也是如此。B3A1B1B3#N/AA4B4A5B5

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

这是我创建的一个公式,效果很好,但有点长(这是 for 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())......

4

2 回答 2

4

试试这个公式

=IF(COUNTIF(A3,$A$1&$B$1),A3,NA())
于 2012-08-24T10:49:34.527 回答
1

请注意,这完全基于这篇文章,但它似乎适合这里。有两种方法可以做到这一点:使用命名范围和 UDF。这两种方式基本上都利用了 Excel 的“隐藏”评估功能。

命名范围

要使用命名范围,您需要定义一个名称(在本例中,我使用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()))

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

在此处输入图像描述

于 2012-08-24T10:11:54.543 回答