excel 使用单元格引用作为逻辑运算符并查找值

excel using cell reference as a logical operator and looking up a value

我有一个 table 来查找这样的值:

logical test | points
-------------|-------
<=   0       |   1
<=   10      |   2
<=   20      |   4
>    20      |   5

如果我的单元格是(例如 A1)<= 0 结果是 1...
如果我的单元格 <=10,则结果为 2 ...
如果我的单元格大于 20,则结果为 5。


我可以为此使用多个 if 函数,但我想防止用户在 table 更改时不得不更改公式。例如,如果由于某种原因,第一行更改为 > 0,则无需更改公式。
我试过在 if 函数中使用 concatenate(mycell;logical_operator;logical_value) 但它似乎不起作用,我更喜欢没有 VBA 的解决方案...
有什么建议吗?

我可能误解了你的问题,所以如果这不对请告诉我,但这看起来正是非精确 look-ups/matches 和查找 table.[= 的正确用例11=]

假设您有一个 table。然后您可以对您的值(在您的示例中为 a1)进行 vlookup 以查找 table,最后一个参数为 1 而不是 0(这告诉 Excel 查找值 小于或等于您提供的值,而不是确切的提供值。

这意味着,在您给出的将 <=0 更改为 >0 的示例中,您必须知道您想要在 0 范围内的终点。如果您想要任何大于 0 到 return 的值,那么您必须删除所有后续值。

这实质上使您能够保持公式完好无损,永远不必更改它,而您只需更改查找 table。

这是一个形象化我在说什么的例子:

正如您在原始 post 中概述的那样,如果基础值发生变化,这实际上会起作用,但它必须是某种类型的变化。您的 table 必须进行排序,并且必须以 [x1, x2]、[x3, x4] 等格式很好地定义间隔。只要您可以控制 [=] 的格式31=],你应该能够执行此操作。

如果您的输入值在单元格 A1 中,则在单元格 B1 中键入以下公式:

=IF(A1<=0,1,IF(A1<=10,2,IF(A1<=20,4,IF(A1>20,5))))

在我的示例中,我在 A 列单元格 A1A28 中填写了值 0 到 27,并将此公式从 B1 复制到 B28测试结果如下:

我了解到您希望能够更改运算符的类型。我假设您使用的唯一运算符是数值比较:<、<=、=、>=、>

使用命名范围更容易设置。根据我的屏幕截图设置运算符、值和分数范围的名称。

例如我的运算符范围是“$C$2:$C$5”,值是“$D$2:$D$5”,分数是“$E$2:$E$5”

然后,使用这个数组公式得到A1中值的分数。

=INDEX(Scores,MATCH(TRUE,IF(Operators="<",A1<Values,(IF(Operators="<=",A1<=Values,IF(Operators="=",A1=Values,IF(Operators=">=",A1>=Values,A1>Values))))),0))

我已将此公式放入单元格 A3。

注意:这是一个数组公式。您需要以一种特殊的方式输入它:双击一个单元格,粘贴公式,然后按 CTRL-SHIFT-ENTER。每次编辑公式时都需要这样做,只有在需要编辑条件范围时才需要这样做。如果操作正确,当您 select 单元格时,编辑栏将显示公式,并自动将 {花括号} 放在公式周围。

该公式检查 C 列中的运算符,然后与 D 列进行适当的比较。它针对每个条件执行此操作并找到第一个为 TRUE 的条件。然后 return 是该条件的分数。

如果有多个匹配条件,则return只为第一个匹配条件打分。如果没有匹配条件,那么就会return#N/A。 (或者,如果您的条件范围内有任何空白行,它将 return 0。)