我有一个像这样的电子表格:
Column A
Ducks
Frogs
<Blank>
Rabbits
<blank>
Horse
我希望能够创建范围(A列)中所有非空白单元格的列表,如下所示:
Ducks
Frogs
Rabbits
Horse
我不希望空白值出现在我的列表中。
此外,如果在范围内找到空白值,我的公式应该跳过并列出范围内的下一个非空白单元格。
然而,目前我正在获得0
这是我的数组公式,请有人告诉我我哪里出错了吗?
=IFERROR(INDEX($F$16:$F$5000,IF($G$16:$G$5000<>"",ROW($1:$5000)),1),"")
答案 0 :(得分:1)
IFERROR
效率非常低,特别是如果要查询的数据集的大小很大; cf我的回复:
最好使用单个单元格来记录预期返回数量,并在主公式中的初始IF
子句中引用该单元格。例如,如果我们为此目的使用单元格H16
,我们会在该单元格中放置:
=COUNTIF(G$16:G$5000,"<>")
主阵列公式**是:
=IF(ROWS($1:1)>H$16,"",INDEX(F:F,SMALL(IF(G$16:G$5000<>"",ROW(G$16:G$5000)),ROWS($1:1))))
并向下复制,直到你得到空白。
对于唯一列表,请将H16
中的公式更改为:
=SUM(IF(FREQUENCY(IF(G16:G5000<>"",MATCH(F16:F5000,F16:F5000,0)),ROW(F16:F5000)-MIN(ROW(F16:F5000))+1),1))
和主要公式:
IF(ROWS($1:1)>H$16,"",INDEX(F:F,SMALL(IF(FREQUENCY(IF(G$16:G$5000<>"",MATCH(F$16:F$5000,F$16:F$5000,0)),ROW(F$16:F$5000)-MIN(ROW(F$16:F$5000))+1),ROW(F$16:F$5000)),ROWS($1:1))))
此致
答案 1 :(得分:0)
我建议您考虑将macro
用于此问题(在工具栏选项中)。您可以录制一个空宏并粘贴我附加的代码。
请注意,宏会覆盖使用历史记录(ctrl + z)更改回来的功能。在代码中,列为16,最后一行为5000,但您可以更改它。
Dim max As Integer
Dim colNum As Integer
Dim limit As Integer
max = 5000
colNum = 16
limit = max
For i = 1 To max
If Cells(i, colNum) = "" Then
Cells(i, colNum).Delete Shift:=xlUp
If limit > 0 Then
i = i - 1
limit = limit - 1
end if
End If
Next i
答案 2 :(得分:0)
我发现其他解决方案(也是该主题的大多数搜索引擎热门)都难以理解:)如果不明确,很难适应另一种/更通用的用法。
不知道性能,但这会实现A列的非空白列表:
=INDEX( $A:$A, 2*ROW($A1)-COUNTIF($A$1:$A1,"<>") )
通过计算上方有多少空白单元格并将其用作“向前看”所需的运行偏移量来工作。