在 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)将它们全部突出显示。
请注意,在 LibreOffice 版本早于 4.4.4.6 中,IFERROR 函数不会抑制错误(请参阅bug 95226)。在较新的版本中,它应该可以正常工作。
编辑
IFERROR 和 ISERROR 函数都通过此特定错误而不是返回 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)))