我有一列文本项,其中项之间可以包含空格(空单元格)。在另一张工作表上,我尝试使用数组公式对现有范围进行过滤以滤除这些空格。
公式如下:
{=IFERROR(INDEX(Input_Page!$C$2:$C$61,SMALL(IF(ISTEXT(Input_Page!$C$2:$C$61),ROW(Input_Page!$C$2:$C$61),""),ROW(Input_Page!C2))),"")}
灵感来自于这地点。
在空白工作簿中,此操作可按预期工作,但是当我尝试在现有工作簿中使用该公式时,它会将包含“0”的单元格放入我的数组函数生成的列表中。输入列和生成的输出列均格式化为文本。我需要这些空列完全不显示在我的输出区域中。
任何帮助或建议都将不胜感激!
答案1
这个问题之前有人问过,并且给出了非常详细的答案这里。
该答案包括手册、VBA 和数组公式解决方案。后者引用自本网站,但长话短说,那里给出的公式(稍作修改以适合您的数据)是:
=INDEX($B$1:$B$21, SMALL(IF(ISBLANK($B$1:$B$21), "", ROW($B$1:$B$21)-MIN(ROW($B$1:$B$21))+1), ROW(A1)))
结果输出显示在下表的 C 列中。如果要避免 #NUM! 错误,请将上述公式包装在 IFERROR() 中,这将在 D 列中给出结果:
=IFERROR(INDEX($B$1:$B$21, SMALL(IF(ISBLANK($B$1:$B$21), "", ROW($B$1:$B$21)-MIN(ROW($B$1:$B$21))+1), ROW(A1))),"")
答案2
你可以尝试将整个事情包装在一个 IF 函数中,
=IF( original formula = "", "", original formula )
因此,如果它等于空白,则不会输入 0,而是返回空白。
{=IF(IFERROR(INDEX(Input_Page!$C$2:$C$61,SMALL(IF(ISTEXT(Input_Page!$C$2:$C$61),ROW(Input_Page!$C$2:$C$61),""),ROW(Input_Page!C2))),"")="","",IFERROR(INDEX(Input_Page!$C$2:$C$61,SMALL(IF(ISTEXT(Input_Page!$C$2:$C$61),ROW(Input_Page!$C$2:$C$61),""),ROW(Input_Page!C2))),"")}
或者
如果实际值并不重要,只是视觉提示,您可以创建自定义数字格式,以便 0 显示为空白。
使用##;##;""