Excel 从多个列返回非空白

Excel 从多个列返回非空白,excel,Excel,我一直在尝试从由多列组成的整个范围中提取非空白单元格,并将其放入一列中的列表中,但没有任何运气。 我有一个适用于单个列的数组,但是当我扩展它的范围时,它失败了 任何帮助都将不胜感激 干杯 弗朗西斯这里有一个例子: Sub Test() Dim c As Variant, NB As New Collection For Each c In [A1:D10] 'Whatever range to check If c <> "" Then NB.Add c Next c Fo

我一直在尝试从由多列组成的整个范围中提取非空白单元格,并将其放入一列中的列表中,但没有任何运气。 我有一个适用于单个列的数组,但是当我扩展它的范围时,它失败了

任何帮助都将不胜感激

干杯

弗朗西斯这里有一个例子:

Sub Test()
Dim c As Variant, NB As New Collection
For Each c In [A1:D10] 'Whatever range to check
    If c <> "" Then NB.Add c
Next c
For Each c In NB
    Debug.Print c 'Do whatever you want with this list here
Next c
End Sub
编辑:

您可以将其直接放入数组中:

Redim Preserve
在大范围内可能会有一些性能问题,这就是为什么使用集合IMO更好的原因,但这可能不会对代码产生任何影响

子测试()
尺寸c,arr(),计数
计数=0
对于[A1:D10]中的每个c,无论检查的范围是什么
如果是“c”,则
重拨保留arr(计数+1)
arr(计数)=c
计数=计数+1
如果结束
下一个c
对于x=0至UBound(arr)
调试.打印arr(x)
下一个x
端接头
您还可以随后将集合放入数组中,并打印结果

Sub Test()
Dim c As Variant, NB As New Collection
For Each c In [A1:D10] 'Whatever range to check
    If c <> "" Then NB.Add c
Next c
Dim arr(), x
ReDim arr(NB.Count)
x = 0
For Each c In NB
    arr(x) = c
    x = x + 1
Next c
For x = 0 To UBound(arr)
    Debug.Print arr(x)
Next x
End Sub
子测试()
尺寸c作为变型,NB作为新系列
对于[A1:D10]中的每个c,无论检查的范围是什么
如果是“c”,请注意添加c
下一个c
Dim arr(),x
重播到达(NB.计数)
x=0
对于NB中的每个c
arr(x)=c
x=x+1
下一个c
对于x=0至UBound(arr)
调试.打印arr(x)
下一个x
端接头

如果有人在寻找配方奶粉解决方案,下面这一点对我也很有用:

=IFERROR(INDIRECT("SHEET1!"&TEXT(SMALL(IF(SHEET1!$A$33:$H$42<>"",ROW(SHEET1!$A$33:$H$42)*10^4+COLUMN(SHEET1!$A$33:$H$42)),ROWS($A$1:A1)),"R0000C0000"),0),"")
=IFERROR(间接(“SHEET1!”&文本(小)(如果(SHEET1!$A$33:$H$42)”,行(SHEET1!$A$33:$H$42)*10^4+列(SHEET1!$A$33:$H$42)),行($A$1:A1)),“R0000C0000”),0

然后按Ctrl+Shift+Enter

嘿,谢谢你的帮助。有没有办法通过数组来实现这一点?返回的结果将被用于另一张纸上的输出。太好了!感谢您花时间来帮助NP-我想您可以使用
特殊单元格来绕过单元格循环-我玩了一会儿,但遇到了其他问题
Sub Test()
Dim c As Variant, NB As New Collection
For Each c In [A1:D10] 'Whatever range to check
    If c <> "" Then NB.Add c
Next c
Dim arr(), x
ReDim arr(NB.Count)
x = 0
For Each c In NB
    arr(x) = c
    x = x + 1
Next c
For x = 0 To UBound(arr)
    Debug.Print arr(x)
Next x
End Sub
=IFERROR(INDIRECT("SHEET1!"&TEXT(SMALL(IF(SHEET1!$A$33:$H$42<>"",ROW(SHEET1!$A$33:$H$42)*10^4+COLUMN(SHEET1!$A$33:$H$42)),ROWS($A$1:A1)),"R0000C0000"),0),"")