错误的数据类型值

时间:2016-01-06 12:28:02

标签: libreoffice-calc

我一直在Windows Excel 中开展项目,但现在我必须将其更改为 LibreOffice Calc ,函数返回#VALUE!,但是有效通常在 Excel

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

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

以下是我在LibreOffice Calc中的Workheet aka SpreadSheet的样子

enter image description here

我在某处读到引号不应该在那里,所以我试图删除/替换它们并从一个单元格获得价值:

- 当我删除 引号“”时,它返回随机单元格值

- 当我替换 引号“”且数字 1 时,它返回了第一个人的值,但是在下一个单元格中(因为它应该找到每个具有特定名称的人,或者如果留下空白,它应该在文件中找到每个人

1 个答案:

答案 0 :(得分:1)

在Excel中,SEARCH函数将匹配包含所有查找单元格的空白搜索单元格。在Calc中,作为搜索条件的空白单元格将返回错误。

要获得“如果搜索单元格为空白则返回所有”行为,您需要将搜索包装在IF中,并返回一个数字(以便ISNUMBER函数返回TRUE)搜索单元格为空白的情况:

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

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

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

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

请注意,在早于4.4.4.6的LibreOffice版本中,IFERROR函数不会抑制错误(请参阅bug 95226)。它应该在新版本中按预期工作。

修改

IFERRORISERROR函数都通过此特定错误而不是返回TRUE或FALSE(似乎是OpenOffice和LibreOffice的当前版本中的错误 - 请参阅“问题”部分OpenOffice wiki页面https://wiki.openoffice.org/wiki/Documentation/How_Tos/Calc:_ISERROR_function#Issues)。

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

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

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