Arrays 从某个范围创建非空白单元格值的列表?
我有一个这样的电子表格:Arrays 从某个范围创建非空白单元格值的列表?,arrays,excel,Arrays,Excel,我有一个这样的电子表格: Column A Ducks Frogs <Blank> Rabbits <blank> Horse 我不希望列表中出现空白值 此外,如果在该范围内找到空白值,则我的公式应跳过并列出该范围内的下一个非空白单元格 然而现在我得到了0 这是我的数组公式,有人能告诉我哪里出错了吗 =IFERROR(INDEX($F$16:$F$5000,IF($G$16:$G$5000<>"",ROW($1:$5000)),1),"") =IFERR
Column A
Ducks
Frogs
<Blank>
Rabbits
<blank>
Horse
我不希望列表中出现空白值
此外,如果在该范围内找到空白值,则我的公式应跳过并列出该范围内的下一个非空白单元格
然而现在我得到了0
这是我的数组公式,有人能告诉我哪里出错了吗
=IFERROR(INDEX($F$16:$F$5000,IF($G$16:$G$5000<>"",ROW($1:$5000)),1),"")
=IFERROR(索引($F$16:$F$5000,如果($G$16:$G$5000”),行($1:$5000)),1),“”)
<代码> > p>我建议您考虑使用<代码>宏<代码>来解决这个问题(它在工具栏选项中)。您可以录制一个空宏并粘贴我附加的代码。
请注意,宏会覆盖使用历史记录(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
IFERROR
在此设置中可能效率非常低,尤其是当查询的数据集很大时;请参阅我的答复:
最好使用一个单元格来记录预期收益数,并在主公式中的初始IF
子句中引用该单元格。例如,如果我们使用cellH16
,我们会在该单元格中放入:
=COUNTIF(G$16:G$5000,”)
主数组公式**为:
=IF(行($1:1)>H$16,”,索引(F:F,小型(IF(G$16:G$5000),行(G$16:G$5000)),行($1:1)))
然后抄下来直到你得到空白
对于唯一列表,请将H16
中的公式更改为:
=SUM(如果)频率(如果)(G16:G5000),匹配(F16:F5000,F16:F5000,0),行(F16:F5000)-MIN(行(F16:F5000))+1),1))
主要公式如下:
IF(ROWS($1:1)>H$16,”,索引(F:F,SMALL)(IF(FREQUENCY)(IF(G$16:G$5000),匹配(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))
关于我发现其他解决方案(以及大多数针对该主题的搜索引擎点击)有点难以辨认:)如果不清楚其本身,则很难适应另一个/更普遍的用法
不知道性能,但这实现了列a中的非空白列表:
=索引($A:$A,2*行($A1)-COUNTIF($A$1:$A1,”)
它的工作原理是计算上面有多少空白单元格,并将其用作“向前看”所需的运行偏移量。如果我继续减少一个,肯定会有进入无止境循环的巨大危险?使用I=max到1步-1的来减少循环会更容易。此外,您可以使用转到特殊…
删除空格。但是如果你想要一个公式……谢谢你的建议,这个方法非常有效。然而,有没有一种方法可以只列出不同的值?我在你最初的问题中是否遗漏了这一点?或者你需要修改它以反映这一点吗?不,你是正确的并且完全理解这个问题,我只是想知道是否有一种方法可以修改公式以同时贴现重复值?是否只显示唯一的值?感谢您将H16中的公式更改为以下数组公式**:=SUM(IF(FREQUENCY)(IF(G16:G5000)”,MATCH(F16:F5000,F16:F5000,0)),ROW(F16:F5000)-MIN(ROW(F16:F5000))+1),主数组公式**将是:=IF(ROWS($1:1)>H$16,“,索引(F:F,SMALL)(IF(FREQUENCY)(IF(IF(IF(16:G$5000)”,MATCH(F$16:F$5000,F$16:F$5000)),ROW(F$16:F$5000),MATCH(F$16:F$5000),ROW)(F$5000)-MIN)(行(F$16:F$5000))+1),行(F$16:F$5000)),行($1:1)))感谢这段代码,但是,excel说第一个公式在单元格H16中有问题。你知道为什么吗?
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