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

如何在Excel中将两个垂直数字列表合并为一个长的垂直列表?,excel,excel-formula,office365,Excel,Excel Formula,Office365,因此,我有一些列的数字,我想知道如何使他们所有的动态组合列表?我知道合并理论上是可行的,但我的列表会改变,我不认为合并是动态的。右边的“联合列表”是我希望实现的目标。我想要所有的副本,但我不想要任何空格,因为例如C列可以很容易地从3个数字变成5个数字。此外,对列表进行排序将是一个巨大的奖励,因为这是我的最终目标,所以如果我可以用另一种方式进行排序,请让我知道 由于您使用的是Office 365,请尝试以下用户定义的小功能: Public Function stackum(rng As Range

因此,我有一些列的数字,我想知道如何使他们所有的动态组合列表?我知道合并理论上是可行的,但我的列表会改变,我不认为合并是动态的。右边的“联合列表”是我希望实现的目标。我想要所有的副本,但我不想要任何空格,因为例如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
公共功能堆栈(rng As范围)
将wf设置为工作表功能
设置wf=Application.WorksheetFunction
黑暗的,黑暗的,黑暗的,黑暗的,黑暗的
ReDim arr(1对wf.CountA(rng),1对1)
brr=rng
i=1
对于brr中的每个b
如果b“那么
arr(i,1)=b
i=i+1
如果结束
下一个b
stackum=arr
端函数

如您所见,它会动态地溢出

如果需要公式而不是自定义项,请尝试:

=LET(z,INDEX($C$10:$F$18,MOD(SEQUENCE(4*9)-1,9)+1,ROUNDUP(SEQUENCE(4*9)/9,0)),FILTER(z,z<>""))
=LET(z,索引($C$10:$F$18,MOD(序列(4*9)-1,9)+1,汇总(序列(4*9)/9,0)),过滤器(z,z“”)
它也会溢出。我不喜欢这个公式。它依赖于“幻数”9,即输入表的高度

编辑#1:

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

=LET(tb,$C$10:$F$18,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<>""))
=LET(tb,$C$10:$F$18,cl,列(tb),行(tb),行(tb),z,索引(tb,MOD(序列(cl*rw)-1,9)+1,汇总(序列(cl*rw)/rw,0)),过滤器(z,z“”)

由于您使用的是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
公共功能堆栈(rng As范围)
将wf设置为工作表功能
设置wf=Application.WorksheetFunction
黑暗的,黑暗的,黑暗的,黑暗的,黑暗的
ReDim arr(1对wf.CountA(rng),1对1)
brr=rng
i=1
对于brr中的每个b
如果b“那么
arr(i,1)=b
i=i+1
如果结束
下一个b
stackum=arr
端函数

如您所见,它会动态地溢出

如果需要公式而不是自定义项,请尝试:

=LET(z,INDEX($C$10:$F$18,MOD(SEQUENCE(4*9)-1,9)+1,ROUNDUP(SEQUENCE(4*9)/9,0)),FILTER(z,z<>""))
=LET(z,索引($C$10:$F$18,MOD(序列(4*9)-1,9)+1,汇总(序列(4*9)/9,0)),过滤器(z,z“”)
它也会溢出。我不喜欢这个公式。它依赖于“幻数”9,即输入表的高度

编辑#1:

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

=LET(tb,$C$10:$F$18,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<>""))
=LET(tb,$C$10:$F$18,cl,列(tb),行(tb),行(tb),z,索引(tb,MOD(序列(cl*rw)-1,9)+1,汇总(序列(cl*rw)/rw,0)),过滤器(z,z“”)
试试O365:

=FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,TRANSPOSE(numBers)) & "</s></t>","//s")
此公式适用于大约300个字符(数字),超过300个字符后,您将遇到
TEXTJOIN
的32767个字符限制。第一个公式的限制是3000多个数字。如果您可能有更多的,您应该看看VBA解决方案

数字
是一个大于所需的命名范围。空白将被忽略。在本例中,我使用
c10:f100
,但您可以根据需要增加大小

带有排序功能

尝试使用O365:

=FILTERXML("<t><s>" & TEXTJOIN("</s><s>",TRUE,TRANSPOSE(numBers)) & "</s></t>","//s")
此公式适用于大约300个字符(数字),超过300个字符后,您将遇到
TEXTJOIN
的32767个字符限制。第一个公式的限制是3000多个数字。如果您可能有更多的,您应该看看VBA解决方案

数字
是一个大于所需的命名范围。空白将被忽略。在本例中,我使用
c10:f100
,但您可以根据需要增加大小

带有排序功能


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

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

=IFERROR(SMALL($C$10:$F$18,ROW(A1)),"")
=IF(ROW(A1)<=SUMPRODUCT(($C$10:$F$18<>"")/COUNTIF($C$10:$F$18,$C$10:$F$18&"")),SMALL($C$10:$F$18,COUNTIF($C$10:$F$18,"<="&I9)+1),"") 
2] 在
I10
中的“将列表与排序合并并删除重复项”,复制公式:

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

=IF(行(A1)所有Excel版本的公式解决方案

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

=IFERROR(SMALL($C$10:$F$18,ROW(A1)),"")
=IF(ROW(A1)<=SUMPRODUCT(($C$10:$F$18<>"")/COUNTIF($C$10:$F$18,$C$10:$F$18&"")),SMALL($C$10:$F$18,COUNTIF($C$10:$F$18,"<="&I9)+1),"") 
2] 在
I10
中的“将列表与排序合并并删除重复项”,复制公式:

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

=IF(第(A1)行)您可以使用并删除
唯一的
。您可以使用并删除
唯一的
。即使在我的示例数据上,我似乎也无法让这个公式起作用。是否有一些设置可以切换?我有=FILTERXML(“&TEXTJOIN(”,TRUE,转置(C10:F29))&“/s”)@guanciale做什么“似乎无法使此公式正常工作”是指?回答错误?错误消息?(如果是,是什么?)Excel冻结?其他内容?噢,很抱歉含糊其辞!我得到了“#名称?”?"错误。我尝试在Excel的web版本中重新创建它,但也遇到了相同的错误。可能只是版本问题?@guanciale您必须在MAC上运行。No
FILTERXML
。我明天将提供不同版本的公式。@guanciale请查看我的编辑,了解适用于MAC或online Excel的O365的公式。我看不出来让这个公式在我的示例数据上运行。是否有一些设置要切换?我有=FILTERXML(“&TEXTJOIN(”,TRUE,TRANSPOSE(C10:F29))&“//s”)@guanciale“似乎无法使这个公式运行”是什么意思?回答错误?错误消息?(如果是,是什么?)Excel冻结了?还有什么?噢,很抱歉说得不清楚!我得到了“#姓名?"错误。我试图在Excel的web版本中重新创建它,但也遇到了相同的错误。可能只是版本问题?@guanciale您必须在MAC上运行。No
FILTERXML
。我明天将提供不同版本的公式。@guanciale查看我的编辑,了解适用于MAC或online Excel的O365的公式为什么不添加第二个LET条目LET(h,行($c$10:$F$18),z,…)并在当前有9?@DS_-Lon的位置使用h