You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel中如何仅用公式合并两个命名列表并按升序排序?

不用VBA,纯公式实现Excel两列表合并并升序排列

当然可以!完全不需要VBA,用Excel自带的公式就能搞定这个需求,下面分两种主流场景给你具体方案:

一、适用于Excel 365/2021(支持动态数组)

这个版本的Excel有强大的动态数组函数,操作超简单:
直接在任意空白单元格输入以下公式,它会自动溢出填充成完整的排序后列表:

=SORT(VSTACK(List1, List2))
  • VSTACK(List1, List2):把List1和List2垂直堆叠合并成一个新的数组;
  • SORT():对合并后的数组按升序排序,正好得到你想要的AA、BB、CC、DD、EE、FF、GG结果。

如果你的列表里可能存在重复值,想要去重后再排序,只需加个UNIQUE()函数:

=SORT(UNIQUE(VSTACK(List1, List2)))

二、适用于旧版Excel(无动态数组,如2019及更早)

旧版没有动态数组函数,需要用数组公式来实现,步骤如下:

  1. 先计算两个列表的总条目数:=COUNTA(List1)+COUNTA(List2),对应你的例子结果是7;
  2. 在第一个目标单元格(比如C1)输入以下数组公式,然后按下Ctrl+Shift+Enter(注意不是单独按Enter):
=IFERROR(INDEX(
    IF(ROW($1:$100)<=COUNTA(List1), INDEX(List1,ROW($1:$100)), INDEX(List2,ROW($1:$100)-COUNTA(List1))),
    MATCH(
        SMALL(
            IF(ROW($1:$100)<=COUNTA(List1), CODE(INDEX(List1,ROW($1:$100))), CODE(INDEX(List2,ROW($1:$100)-COUNTA(List1)))),
            ROW(A1)
        ),
        IF(ROW($1:$100)<=COUNTA(List1), CODE(INDEX(List1,ROW($1:$100))), CODE(INDEX(List2,ROW($1:$100)-COUNTA(List1)))),
        0
    )
), "")
  1. 把这个单元格下拉填充到第7行(总条目数),就能得到完整的排序后列表。

公式说明:

  • IF(ROW($1:$100)<=COUNTA(List1),...):先构建一个包含List1和List2所有内容的虚拟合并数组;
  • CODE():把文本转换成对应的ASCII码,方便排序比较;
  • SMALL(...,ROW(A1)):依次提取排序后的ASCII码值;
  • MATCH()找到对应值的位置,最后用INDEX()提取文本,IFERROR()用来隐藏超出条目数后的错误值。

内容的提问来源于stack exchange,提问作者Michael

火山引擎 最新活动