在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)
所以完整的公式將被輸入Ctrl
+ Shift
+ Enter
(因爲這是一個數組式)在細胞F8爲:
=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)));"")
複製一nd粘貼你需要的許多單元格。如果要粘貼到大量單元格,可以通過在名稱框(在編輯欄左側)中鍵入範圍(例如F9:F1405
)並按Enter
來突出顯示它們。
注意,在LibreOffice的版本早於4.4.4.6的IFERROR
功能不會取消錯誤(見bug 95226)。它應該像你期望的那樣在更新的版本中工作。
編輯
無論是IFERROR
和ISERROR
功能通過,而不是返回TRUE或FALSE(似乎是在這兩個OpenOffice和LibreOffice的當前版本的bug,通過這種特殊的錯誤 - 看到了OpenOffice的「問題」一節wiki頁面https://wiki.openoffice.org/wiki/Documentation/How_Tos/Calc:_ISERROR_function#Issues)。
潛在的解決方法是不將任何文本值傳遞給SMALL
函數。 (如果找不到匹配項,上面的公式將傳遞一個空文本字符串到SMALL
函數,從而產生一個錯誤)。而不是""
我們將傳遞數組中的最後一行數 - 爲了使這個範圍中最底部的單元格工作,在這種情況下,第1398行必須是一個空格(或者,如果它可以爲空工具→選項→OpenOffice Calc→查看→UNcheck「顯示零值」)
我們也將確保不要告訴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)))
我只是有一個問題,因爲那些沒有找到任何值的單元格返回*#VALUE *我想知道,是什麼改變了需要被應用到只留下一個空格!否則的功能和解釋是精彩,非常感謝你! – McBooley
@McBooley我在版本4.4.4.3中測試過,看到沒有聲音的單元格返回*#Value!*而不是空白;我認爲從我鏈接到的bug中可以看出,這將在更新的版本中修復。但它聽起來像你有一個更新的版本,並仍然看到*#Value!*被錯誤地通過'IFERROR'函數推送? – Lyrl
我有LibreOffice5,是的,我得到*#值!*從** IFERROR **如果沒有返回的數據,否則當然很好用 – McBooley