我在Excel中有两个独立的列表。我需要将它们组合成一个列表,并将该列表按升序或降序排序。
例如如何合并这两个列表(Excel中的命名范围List1
和List2
)
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)), ""))
,结果看起来像这样
可以仅使用公式(无VBA)实现已排序的合并列表吗?
答案 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最好保持公式简单并只隐藏额外的列。
在此示例中,我们合并了已排序的范围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)