0

我最近使用template.xlsx名为. 除以下公式外,所有公式均已正确转换:template.odsgnumeric

=LOOKUP(2,1/(INDIRECT(CONCATENATE("Import!$F$",Q3,":$F$",M3))>=(S3)*VALUE(SUBSTITUTE($S$1,"LOOKUP FACTOR x",""))),INDIRECT(CONCATENATE("Import!$B$",Q3,":$B$",M3)))

这个公式在某种程度上相当长,但为了简短起见,我有两张纸,一张叫Import,另一张Lookup。我想返回特定范围内的最后一个值(并匹配其在另一个范围内的行),该值大于或等于S3乘以in 的值LOOKUP FACTOR x,例如,如果是LOOKUP FACTOR x2,则 in 的值S3乘以 2。

我发现OpenOffice Calc从另一个工作表访问范围的方式与Excel的方式不同,因此我将公式重写为:

=LOOKUP(2;1/(INDIRECT(CONCATENATE("$Import.$F$";Q3;":$F$";M3))>=(S3)*VALUE(SUBSTITUTE($S$1;"LOOKUP FACTOR x";"")));INDIRECT(CONCATENATE("$Import.$B$";Q3;":$B$";M3)))

特此将工作表名称从 更改Import!$F$$Import.$F$。列也是如此$B$

当我运行这个公式时,OpenOffice 返回错误#DIV/0!

因此,如果我将公式分成每个部分:

  • =INDIRECT(CONCATENATE("$Import.$F$";Q3;":$F$";M3))
  • =INDIRECT(CONCATENATE("$Import.$B$";Q3;":$B$";M3))
  • =(S3)*VALUE(SUBSTITUTE($S$1;"LOOKUP FACTOR x";""))

每当我在单独的单元格中执行它们时,我在两个电子表格程序中都会得到相同的结果,这意味着它们可以单独工作。这让我相信问题出在LOOKUP.

在上述情况下,我使用的原因INDIRECT是因为单元格Q3M3对范围开头和结尾的引用:

Q3包含:

{=MIN(IF($Import.$A$1:$A$1048576=A3;ROW($Import.$A$1:$A$1048576)-ROW(INDEX($Import.$A$1:$A$1048576;1;1))+1))}

M3包含大致相同但使用MAX

{=MAX(...)}

这些将返回数组数组开始和结束的索引位置。说A3等于Apple,然后Q3将返回Apple' 的第一次出现Q3的行,并返回Apple' 的最后一次出现的行Column A

值得重申的是,除 之外的所有公式都有效LOOKUP,这意味着上述单元格引用 B3M3返回正确的索引位置(或行)。还值得一提的是,该公式确实适用于 Excel。

有谁知道为什么该LOOKUP公式在 OpenOffice 中不起作用?

这可以在没有的情况下完成LOOKUP吗?

4

1 回答 1

1

不知道它在 Excel 中是如何工作的,但在 Calc 中,>=如果左侧的值大于或等于右侧的值,则简单地返回 true。所以听起来我们需要添加一个IF声明来做你所要求的。

以下数组公式查找条件返回 true 的最高行。然后它从该单元格中获取值。

=INDIRECT("Import.F"&MAX(IF(INDIRECT(CONCATENATE("$Import.$F$";Q3;":$F$";M3))>=S3*VALUE(SUBSTITUTE($S$1;"LOOKUP FACTOR x";""));ROW(INDIRECT(CONCATENATE("$Import.$F$";Q3;":$F$";M3)));0)))

分解:

  • INDIRECT( - 从该单元格中获取值
  • "Import.F"& - 这个加上行就是我们要找的地址
  • MAX( - 获取有效的最高行号,因为我们想要范围内的最后一个值
  • IF( - 如果值大于或等于,则返回行号,否则返回零
  • INDIRECT(CONCATENATE("$Import.$F$";Q3;":$F$";M3))>=S3*VALUE(SUBSTITUTE($S$1;"LOOKUP FACTOR x";"")) - 返回真如果值大于或等于,否则为假
  • ;ROW(INDIRECT(CONCATENATE("$Import.$F$";Q3;":$F$";M3)) - 获取我们当前正在查看的行。这可以CREATEARRAY(Q3;M3)通过实现用户定义的函数来缩短返回一个行号数组。
  • ;0 - 如果不大于或等于,则将行号返回为零
于 2017-11-02T16:04:22.777 回答