Excel 是否有一个公式可以从一张图纸(不包括空白)中获取所有值,并按顺序显示在另一张图纸上?

Excel 是否有一个公式可以从一张图纸(不包括空白)中获取所有值,并按顺序显示在另一张图纸上?,excel,vba,excel-formula,Excel,Vba,Excel Formula,有点棘手的问题。我把F:K列和表1中的数字放在一起 是否有excel公式可以复制表1(不包括空格)中的所有值,并将其显示在表2中的B列中 B列第2页中的显示顺序应为水平,因此如果F2中有任何值;G2;H2;I2;J2;K2-F3;G3;H3;I3;J3;K3等应按该顺序显示 带数字的列 因此,表2中的预期输出应如下所示 非常感谢您的光临互联网上有一个函数,相当于PHP内爆函数,它可以满足您的需要。 并成为工作簿中要使用的函数。 在L2中: 我会这样做 Option Explicit Pu

有点棘手的问题。我把F:K列和表1中的数字放在一起

是否有excel公式可以复制表1(不包括空格)中的所有值,并将其显示在表2中的B列中

B列第2页中的显示顺序应为水平,因此如果F2中有任何值;G2;H2;I2;J2;K2-F3;G3;H3;I3;J3;K3等应按该顺序显示

带数字的列

因此,表2中的预期输出应如下所示


非常感谢您的光临

互联网上有一个函数,相当于PHP内爆函数,它可以满足您的需要。

并成为工作簿中要使用的函数。
在L2中:


我会这样做

Option Explicit

Public Sub test()
    AggregateToColumnWithoutBlanks DataRange:=Range("A2:F4"), OutputStart:=Range("H2")
End Sub

Public Sub AggregateToColumnWithoutBlanks(ByVal DataRange As Range, ByVal OutputStart As Range)
    Dim DataCells As Range
    Set DataCells = DataRange.SpecialCells(xlCellTypeConstants)
    
    If DataCells Is Nothing Then Exit Sub 'no data found
    
    Dim Output() As Variant
    ReDim Output(1 To DataCells.Count, 1 To 1) As Variant
    
    Dim iRow As Long
    
    Dim Cell As Range
    For Each Cell In DataCells.Cells
        iRow = iRow + 1
        Output(iRow, 1) = Cell.Value
    Next Cell

    OutputStart.Resize(RowSize:=UBound(Output, 1)).Value = Output
End Sub

循环遍历所有具有常量值的单元格
xlCellTypeConstants
,如果有可能需要调整的公式。并将它们收集到一个数组中,以便在一个范围内轻松输出。

排除空格位很困难-不排除空格可以使用
=INDEX(Sheet1!F:K,FLOOR.MATH(ROW(B1)/6+5/6),MOD(ROW(B1)-1,6)+1)在单元格B1中复制下显示您的预期输出。你的excel版本是什么
TEXTJOIN()
可能有效。Hi@Andreas似乎是一个完美的解决方案,但是我使用excel 2013,并且内爆函数不适用于我。它不适用于任何人,除了那些在VBA编辑器中的模块答案中添加代码的人。无论如何,它不符合要求。查看预期输出屏幕截图。这是在我写下此答案后编辑的。但问题仍然是:
应该是水平的,所以如果F2中有任何值;G2;H2;I2;J2;K2-F3;G3;H3;I3;J3;K3
。我向您致敬,先生。像梦一样工作@PEHhow我可以用单元格中的公式调整上面的范围吗?我已经将数据单元类型更改为xlCellTypeFormulas类型,但它会使用空格提取输出?因为它们不是空白的。空白表示没有内容,甚至没有公式。您是对的,有一列包含vlookup公式。我想用上面的代码来转移这些列(不包括空格)。您自己说过“如果有公式,您可能需要调整它。并将它们收集到一个数组中,以便在一个范围内轻松输出。”?
=IMPLODE(F2:K2,";")
Option Explicit

Public Sub test()
    AggregateToColumnWithoutBlanks DataRange:=Range("A2:F4"), OutputStart:=Range("H2")
End Sub

Public Sub AggregateToColumnWithoutBlanks(ByVal DataRange As Range, ByVal OutputStart As Range)
    Dim DataCells As Range
    Set DataCells = DataRange.SpecialCells(xlCellTypeConstants)
    
    If DataCells Is Nothing Then Exit Sub 'no data found
    
    Dim Output() As Variant
    ReDim Output(1 To DataCells.Count, 1 To 1) As Variant
    
    Dim iRow As Long
    
    Dim Cell As Range
    For Each Cell In DataCells.Cells
        iRow = iRow + 1
        Output(iRow, 1) = Cell.Value
    Next Cell

    OutputStart.Resize(RowSize:=UBound(Output, 1)).Value = Output
End Sub