Excel查找公式不适用于OpenOffice Calc

时间:2017-11-01 15:35:50

标签: excel excel-formula lookup openoffice-calc gnumeric

我最近使用名为template.xlsx的命令行实用程序将名为template.ods的文件转换为gnumeric。除了这一个之外,所有公式都被正确转换:

=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)))

这个公式在某种程度上相当长,但为了保持简短,我有2张,一张叫Import,另一张叫Lookup。我想返回特定范围内的最后值(并在另一个范围内匹配其行),该值大于或等于S3中的值乘以LOOKUP FACTOR x ,例如如果是LOOKUP FACTOR x2,则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行{1}} Column A中的最后一次出现。

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

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

这可以在没有M3吗?

的情况下完成

1 个答案:

答案 0 :(得分:1)

不知道它在Excel中如何工作,但在Calc中,如果左边的值大于或等于右边的值,>=只返回true。所以听起来我们需要添加一个IF语句来做你要求的事情。

以下array formula找到条件返回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)))

故障:

  • 间接( - 从该单元格中获取值
  • “Import.F”&amp; - 这个加上行会生成我们正在寻找的地址
  • MAX( - 获取有效的最高行号,因为我们想要范围内的最后一个值
  • IF( - 如果值大于或等于,则返回行号,否则返回零
  • 间接(CONCATENATE(“$ Import。$ F $”; Q3;“:$ F $”; M3))&gt; = S3 * VALUE(SUBSTITUTE($ S $ 1;“LOOKUP FACTOR x”; “”))) - 如果值大于或等于,则返回true,否则返回false
  • ;行(间接(CONCATENATE(“$ Import。$ F $”; Q3;“:$ F $”; M3)) - 获取我们当前正在查看的行。这可能通过实现returns an array行号的用户定义函数缩短为CREATEARRAY(Q3;M3)
  • ; 0 - 如果不大于或等于
  • ,则将行号返回为零