Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 从某个范围创建非空白单元格值的列表?_Arrays_Excel - Fatal编程技术网

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
子句中引用该单元格。例如,如果我们使用cell
H16
,我们会在该单元格中放入:

=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