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

在单元格A1 ,可以是<<=>>= (string)。

在单元格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()) ) ) ) 

有没有更方便的方法来做这个工作? 从一个string到一个操作符的铸造将是伟大的,但是,我不知道任何编程语言能够做这样的东西:)理想情况下,它应该是这样=IF($A3 $A$1 $B$1; $A3; NA())

试试这个公式

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

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

命名范围

要使用命名的范围,可以定义一个名称(在本例中,我使用了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 

然后input下面的公式:

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

NA()的有点哈克,但评估函数返回一个#VALUE错误,而不是#N / A,所以这笨拙地强制你想要的错误。 此外,该函数返回一个string,所以你需要将结果作为一个整数。 我有点喜欢第一种方法:)

在这里输入图像说明