错误的数据类型值

Wrong data type value

我一直在 windowsExcel 中做一个项目,但现在我必须将其更改为 LibreOffice Calc 和函数 returns #VALUE!,但在 Excel.

中正常工作

这是函数(它在特定列和行中搜索值

=IFERROR(INDEX($B:$B00; SMALL(IF(ISNUMBER((SEARCH($F;$B:$B00))*
(SEARCH($G;$D:$D00))); ROW($D:$D00)-MIN(ROW($D:$D00))+1;"");ROW(A21)));"")

这是我的工作表,也就是 LibreOffice Calc 中的 SpreadSheet 的样子

我在某处读到引号不应该在那里,所以我尝试 Remove/Replace 它们并从一个单元格中获取值:

-当我 REMOVED Quotes "" 时,它返回一个 Random 单元格值

-当我 REPLACED Quotes "" 与数字 1 它返回了第一个人的值,但在下一个单元格中(因为它应该找到每个具有特定名字的人,或者如果留下 Blank 它应该找到 every Person 在文件中。

在 Excel 中,SEARCH 函数会将空白搜索单元格与所有查找单元格相匹配。在 Calc 中,空白单元格作为搜索条件将 return 出错。

要获得“return 如果搜索单元格为空则全部”行为,您需要将每个搜索包含在 IF、return 数字中(因此ISNUMBER 函数 returns TRUE) 在搜索单元格为空的情况下:

IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)

因此您的完整公式将在单元格 F8 中输入 Ctrl+Shift+Enter(因为这是一个数组公式):

=IFERROR(INDEX($B:$B00;SMALL(IF(ISNUMBER(IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)); ROW($D:$D00) - MIN(ROW($D:$D00))+1;"");ROW(A1)));"")

复制并粘贴您需要的任意多个单元格。如果要粘贴到大量单元格,可以通过在名称框(公式栏左侧)中键入范围(例如 F9:F1405,然后按 Enter 来突出显示它们.

请注意,在低于 4.4.4.6 的 LibreOffice 版本中,IFERROR 函数不会抑制错误(请参阅 bug 95226)。在较新的版本中它应该可以像您期望的那样工作。

编辑

IFERRORISERROR 函数都传递了这个特定的错误,而不是 returning TRUE 或 FALSE(似乎是 OpenOffice 和 LibreOffice 当前版本中的错误 -请参阅 OpenOffice 维基页面 https://wiki.openoffice.org/wiki/Documentation/How_Tos/Calc:_ISERROR_function#Issues 的“问题”部分。

一个可能的解决方法是不将任何文本值传递给 SMALL 函数。 (如果找不到匹配项,上面的公式会将空文本字符串传递给 SMALL 函数,从而产生错误)。我们将传递数组中的最后一个行号而不是 "" - 为了使范围内的 bottom-most 单元格起作用,在本例中为第 1398 行,必须是 space(或,如果工具→选项→OpenOffice Calc→查看→取消选中“显示零值”,则可以为空。

我们还将确保不告诉 SMALL 函数查找大于其提供的范围大小的排名。所以像这样:

=INDEX($B:$B00;SMALL(IF(ISNUMBER(IF($F<>"";SEARCH($F;$B:$B00);1) * IF($G<>"";SEARCH($G;$D:$D00);1)); ROW($D:$D00) - MIN(ROW($D:$D00))+1;1398);MIN(ROW(A1),1398)))