在Excel中按升序或降序合并两个列表

时间:2014-10-16 03:05:03

标签: excel list sorting merge

我在Excel中有两个独立的列表。我需要将它们组合成一个列表,并将该列表按升序或降序排序。

例如如何合并这两个列表(Excel中的命名范围List1List2

List1      List2
AA         BB
DD         EE
FF         GG
KK

进入一个列表

AA
BB
DD
EE
FF
GG
KK

我设法合并列表,但没有使用以下公式进行升序或降序排序:

=IFERROR(INDEX(List1, ROWS(AH4:$AH$4)), IFERROR(INDEX(List2, ROWS(AH4:$AH$4)-ROWS(List1)), ""))

,结果看起来像这样

enter image description here

可以仅使用公式(无VBA)实现已排序的合并列表吗?

3 个答案:

答案 0 :(得分:0)

请尝试:

=IF(ROW()<=COUNTA(A:A), INDEX(A:A,ROW()), IF(ROW()>COUNTA(A:B), "", INDEX(B:B,ROW()-COUNTA(A:A))))

直接从Jerry Beaucaire窃取。

答案 1 :(得分:0)

如果您从两个列表中创建所有单元格的新范围,并将其称为BothLists,那么您可以使用此 -

= INDEX(BothLists,IF(ISODD(ROW() - ROW(列表1))= TRUE,((ROW() - ROW(列表1)+1)/ 2)+1,(ROW() - ROW(列表1)2)/ 2),IF(ISODD(ROW() - ROW(列表1))= TRUE,1,2))

这假设,就像您的示例一样,您的两列中的所有值&#34; tile&#34;在列表中移动时始终从最低到最高。 (例如,A2中的最低值,B2中的第二低,A3中的第三低,B3中的第四低等)

换句话说,这意味着这两件事情都是真的 -

(1)在同一行中,第一列中的每个值都小于第二列中的值。

(2)第一列中的每个值都大于其正上方的行中的值,但是在第二列中

如果情况不对,请告知。

参考 - 来自类似工作的个人经历我必须弄清楚我的工作地点。

答案 2 :(得分:0)

您只能使用公式来merge sort,但是我能想到的任何实现都将需要额外的临时列。我得到的最简单的实现使用5个额外的列-您可以轻松地将其减少到3个,甚至2个,但是IMO最好保持公式简单并只隐藏额外的列。

Example of a merge sort worksheet

在此示例中,我们合并了已排序的范围A1:A14和C4:C14。实际上,这是A和C列的全部-我正在使用的公式通过查找空格来确定范围的结尾,因此以后可以轻松添加数据,而不必使用明确的范围大小。但是,如果您愿意,可以更改它。

输出在E列中。那里的公式很简单:=IF(ISBLANK(G1),,INDIRECT(G1))。 “ if”只是为了避免当我们用完数据时出错,并不是严格需要的。

所有实际工作都在G列中完成:

=IF(ISBLANK(H1),IF(ISBLANK(I1),,"C"&K1),IF(ISBLANK(I1),"A"&J1,IF(H1<=I1,"A"&J1,"C"&K1)))

其中大多数用于检查我们是否用完了一个或两个列表中的数据。比较在表达式的末尾进行:如果项目的<=,则在第一个列表中构造单元格索引,否则使用第二个列表。

H和I列基于J和K列中的列表索引反映了列表值。因此,它们具有简单的公式:

=INDIRECT("A"&J1)
=INDIRECT("C"&K1)

列J和K也很简单。它们根据G列中发生的结果递增。第一行是静态的,并根据数据的位置进行设置。 (在最简单的情况下,只有11。)之后,公式为:

=J1+IF(LEFT($G1)="A",1,0)
=K1+IF(LEFT($G1)="C",1,0)
相关问题