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!
答案 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()
而不是......