答案1
类似查找函数VLOOKUP()
可用于查找查找值并返回结果,或未找到查找值并返回 #ERROR!。显然,这通常以“积极”意义使用,寻找结果,但也可以以“消极”意义使用,不寻找结果,而是寻找 #ERROR!。
然后,还可以使用函数测试是否存在 #ERROR!。ISERROR()
有时IFERROR()
可以使用,但许多情况不适合使用IFERROR()
的机制,这是其中之一。ISERROR()
将在这里用作更复杂的NOT()
。然后,如果未找到 INSTRUMENT,则IF()
测试将成功,因为它正在寻找这样的失败。在这种情况下,TRUE 结果是查找单元格的值。如果测试失败(INSTRUMENT 存在于那里),则返回“”。
下面的公式可以实现这一点:
=IF(ISERROR(VLOOKUP(A2:A9,$F$2:$F$5,1,FALSE)),A2:A9,"")
如果您有SPILL
功能,则只需第一个单元格需要公式。如果没有,请将其粘贴到第一个单元格中,然后使用 {CSE} 执行旧方法创建数组。
请注意,公式的结果会分布在整个输出范围内。要对它们进行分组,您需要对它们进行排序,将空的结果放在列表的底部,这样它们就不会影响列表的易用性,也不会影响列表的外观,无论哪一个对您来说更重要。
但是,对于存在的字符,例如上面公式中的“”,甚至更高的字符(例如UNICODE(160)
空格),几乎任何字符都会排序到列表的开头。您可以通过多种方式实现这一点,包括复制,然后粘贴为值,然后排序,但要使用公式来做到这一点,这样您就不需要交互了,您可以尝试以下方法:
=SUBSTITUTE(SORT(IF(ISERROR(VLOOKUP(A2:A9,$F$2:$F$5,1,FALSE)),A2:A9,"ZZZZZZZZZZ")),"ZZZZZZZZZZ","")
您使用一个字符串,该字符串应始终排在列表末尾。此公式中使用了“ZZZZZZZZZZ”。然后,您SORT()
将所有这些强制排在末尾,并将您想要首先看到的放在顶部。然后,您SUBSTITUTE()
将该字符串替换为空格,例如“”,然后所有这些“消失”……当然不是真的,只是表面上如此。
(显然,您需要在选择或调整的公式中使用真实的参考。)