我正在尝试创建一个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,具有真实的输入和真实的范围。
答案 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
编辑:
以下公式可为您提供的示例数据产生正确的结果,并且适用于144.0至148.0之间的任何值。
=IFNA(VLOOKUP(A3;A$13:C$18;3;1); "None")
但是,150.0产生-
,而550.0产生+
。如果那不是您想要的,请使用上面的公式,该公式具有两个VLOOKUP
表达式。