如何在Excel中将两个垂直数字列表合并为一个长垂直列表?

How to merge two vertical number lists into one long vertical list in Excel?

我有几列数字,我想知道如何制作一个包含所有数字的动态组合列表?我知道合并在理论上可行,但我的列表发生了变化,我认为合并不是动态的。右边的'Combines List'是我希望完成的。我想要所有重复项,但我不想要任何空格,因为例如 C 列可以很容易地从 3 个数字变为 5 个数字。此外,对列表进行排序将是一个超级奖励,因为这是我的最终目标,所以如果我能以另一种方式解决这个问题,请告诉我。

由于您使用的是 Office 365,请尝试这个用户定义的小函数:

Public Function stackum(rng As Range)
    Dim wf As WorksheetFunction
    Set wf = Application.WorksheetFunction
    Dim arr, i As Long, brr, b
    
    ReDim arr(1 To wf.CountA(rng), 1 To 1)
    
    brr = rng
    i = 1
    For Each b In brr
        If b <> "" Then
            arr(i, 1) = b
            i = i + 1
        End If
    Next b
    
    stackum = arr
End Function

如您所见,它是动态溢出的。

如果您想要公式而不是 UDF,请尝试:

=LET(z,INDEX($C:$F,MOD(SEQUENCE(4*9)-1,9)+1,ROUNDUP(SEQUENCE(4*9)/9,0)),FILTER(z,z<>""))

它也溢出来了。我不喜欢这个公式。它依赖于“幻数”9,即输入的高度 table.

编辑#1:

要消除两个幻数(4, 9),我们可以使用:

=LET(tb,$C:$F,cl,COLUMNS(tb),rw,ROWS(tb),z,INDEX(tb,MOD(SEQUENCE(cl*rw)-1,9)+1,ROUNDUP(SEQUENCE(cl*rw)/rw,0)),FILTER(z,z<>""))

试试,用 O365:

=FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,TRANSPOSE(numBers)) & "</s></t>","//s")

如果您希望列表排序,则:

=SORT(FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,TRANSPOSE(numBers)) & "</s></t>","//s"))

EDIT 如果您 运行正在 MAC 或在线 Excel,您没有FILTERXML 函数。您可以改用以下公式:

=SORT(--TRIM(MID(TEXTJOIN(REPT(" ",99),TRUE,TRANSPOSE(C10:F29)),(SEQUENCE(COUNT(numBers))-1)*99+1,99)))

此公式适用于 300 多个字符(数字),之后您将 运行 进入 TEXTJOIN 的 32,767 个字符限制。第一个公式的数字限制为 3,000 多一点。如果你有更多,你应该看看 VBA 解决方案

numBers 是一个比您需要的更大的命名范围。空白将被忽略。在这种情况下,我使用 c10:f100,但您可以增加大小以适应。

带排序

所有Excel版本的公式解决方案

1] H10 中的“组合列表与排序”,公式复制下来:

=IFERROR(SMALL($C:$F,ROW(A1)),"")

2] I10 中的“组合列表与排序并删除重复项”,向下复制的公式:

=IF(ROW(A1)<=SUMPRODUCT(($C:$F<>"")/COUNTIF($C:$F,$C:$F&"")),SMALL($C:$F,COUNTIF($C:$F,"<="&I9)+1),"")