我最近使用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)))
这个公式在某种程度上相当长,但为了简短起见,我有两张纸,一张叫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
是因为单元格Q3
和M3
对范围开头和结尾的引用:
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
,这意味着上述单元格引用 B3
并M3
返回正确的索引位置(或行)。还值得一提的是,该公式确实适用于 Excel。
有谁知道为什么该LOOKUP
公式在 OpenOffice 中不起作用?
这可以在没有的情况下完成LOOKUP
吗?