extract values which are not blank from a column in excel

时间:2018-06-18 11:42:16

标签: excel excel-formula

I have tried all similar posts to try and get this working, but nothing I try seems to work!

I have a list with values in on a sheet called "All" which contains vales generated from a formula, these can show as text or as blank

        D
5     text
6   
7     text
8     text2
9
10    text

I would like this list generated on a different sheet ("Summary") so it just shows the values eg:

     A
 1  text
 2  text
 3  text2
 4  text

Thanks in advance!

1 个答案:

答案 0 :(得分:2)

=IFERROR(INDEX(D:D,SMALL(IF(D:D<>"",ROW(D:D)),ROW(1:1)),"")

这是一个数组公式,使用 Ctrl + Shift + 确认公式

如果您可以将D:D的大小限制为可以提高性能的精确范围。

修改

OP评论: -

不确定我做错了什么,只是将其改为=IFERROR(INDEX('All'!D5:D50,SMALL(IF('All'!D5:D50<>"",ROW('All'!D5:D50)),ROW('All'!5:5))),"") - 我错过了一些明显的东西吗?

响应: -

=IFERROR(INDEX('All'!D$5:D$50,SMALL(IF('All'!D$5:D$50<>"",ROW('All'!D$5:D$50)-ROW('All'!D$5)+1),ROW(1:1))),"")

这几乎是正确的但是为了让你能够理解这里发生了什么,我会为你打破这个公式。对于初学者,您需要使用绝对引用锁定行,以便在向下拖动公式时不会更改。

IF('All'!D$5:D$50<>"",ROW('All'!D$5:D$50)-ROW('All'!D$5)+1)

上面的公式是构建一个我们希望INDEX返回的行号数组,我添加了逻辑-ROW('All'!D$5)+1以确保数据的第一行是INDEX()中的第一行;该数组返回行号或FALSE

SMALL([above],ROW(1:1))

然后我们使用SMALL()返回行号数组中的第n个最小值,这必须以ROW(1:1)开始,因为它返回1并且将获得第一个匹配。此公式无法锁定,以便在拖动时更改,返回第2 /第3 /第4等。

IFERROR(INDEX('All'!D$5:D$50,[above]),"")

INDEX()公式现在可以根据范围获得正确的结果,并返回第n个最小匹配(如果没有匹配),如果没有匹配则会抛出错误,这就是为什么我将它包装在{ {1}}要抓住并返回IFERROR()而不是......