将电池与一系列电池对进行比较

时间:2018-07-16 07:24:05

标签: excel-formula spreadsheet formulas libreoffice-calc

我正在尝试创建一个LibreOffice电子表格公式,该公式可根据另一输入列填充一列,将每个输入与另一张工作表中定义的一系列范围对进行比较,最后根据匹配的标准输出符号。我有一系列指定+输出的范围,和另一个对应于OR(AND(">= $A$1", "< $B$1"), AND(">=$A$2", "<$B$2"), ...)的序列,但是并不是所有的输入都属于一个类别。稍后,我将这个三进制输出用于另一个已经存在的表达式。

我的问题变成了:如何在不弄清楚每个单个单元格(例如$A$1:$B$4)的单元格坐标的情况下针对每个范围对测试输入?理想情况下,我可以只指定要与之比较的数组,例如-。因为我不打算共享此文件,所以也可以在python宏中编写它。

我在python中编写了一个非常快速的列表comp来说明我的追求。该代码段将是一半,例如测试>>> def cmp(f, r): ... return r[0] <= f < r[1] >>> f = (1, 2, 3) >>> ranges = ((2, 5), (4, 6), (3, 8)) >>> [any([cmp(i, r) for r in ranges]) for i in f] [False, True, True] 资格,并且这些值可能会输入到输出符号的条件中:

{{1}}

这是一个小的test example,具有真实的输入和真实的范围。

1 个答案:

答案 0 :(得分:1)

更改范围对,使它们位于从A13开始的两列中。确保它们按排序顺序(数据->排序)。

A           B           C
~~~~~~~~    ~~~~~~~~    ~
145.1000    145.5000    -
146.0000    146.4000    +
146.6000    147.0000    -
147.0000    147.4000    +
147.6000    148.0000    -
440.0000    445.0000    +

在每一行中,指定是负数还是正数。为此,我在C13中输入以下公式并填写。如果范围对不一致,请手动输入C13及以下的值。

=IF(ISODD(ROW());"-";"+")

现在,在C3单元格中输入以下公式并填写。

=IFNA(IF(
    VLOOKUP(A3;A$13:C$18;2;1) >= A3;
    VLOOKUP(A3;A$13:C$18;3;1);
    "None");"None")

该公式找到最接近的对,然后检查数字是否在该范围内。为了进行更好的测试,我还建议使用145.7000作为输入,如果我正确理解了这个问题,则应该保持不变。

C列中的结果:

-
+
None
None

文档:VLOOKUPIFNAROW

编辑

以下公式可为您提供的示例数据产生正确的结果,并且适用于144.0至148.0之间的任何值。

=IFNA(VLOOKUP(A3;A$13:C$18;3;1); "None")

但是,150.0产生-,而550.0产生+。如果那不是您想要的,请使用上面的公式,该公式具有两个VLOOKUP表达式。