对 B 列进行排序,同时保持 A 列的顺序

对 B 列进行排序,同时保持 A 列的顺序

在 Excel 中,我有 2 列。我想按字母顺序对第二列进行排序,同时保持第一列中的(自定义)顺序(想想 std::stable_sort,其中相等性仅基于第一列)。示例:

dsf   k
www   d
www   a
azd   q
azd   e
azd   b

应该成为

dsf   k
www   a
www   d
azd   b
azd   e
azd   q

排序向导似乎没有任何“保持当前顺序”选项。我可以定义自定义顺序,但我有超过一千个不同的元素;这样做真的很麻烦,而且这个自定义顺序随时可能改变。

答案1

我假设您的数据从第 2 行开始,并且该列C可用作“辅助列”。将

=IF(A1=A2, C1, C1+1)

放入单元格。 C2(如果C没有可用的 列 ,请使用可用的列。如果您的数据从第 1 行开始,请插入一个空白行,或(仍然)将上述内容放入单元格C2,但放入1单元格C1。)向下拖动/填充。此( 列C)现在“记录”您的自定义顺序;例如,C2= 1、C3= C4= 2 和C5= C6= C7= 3。现在按 列C和 列排序B

答案2

快速而肮脏的:-

  1. 将 A 列的内容复制到记事本中,然后重新复制到剪贴板。
  2. 选择两列。
  3. 选择排序功能并使用“自定义列表”顺序对 A 列进行排序。
  4. 将剪贴板中的数据输入自定义列表。
  5. 在排序功能中添加一个级别,然后按 B 列“从小到大”排序。

答案3

我认为最好的办法是使用自定义顺序。如果不需要经常更新,您可以直接进行更新FILE>OPTIONS>ADVANCED>EDIT CUSTOM LISTS...,然后导入整个范围。然后在排序时使用它。

VBA 解决方案类似于

子排序()
Dim iCustListNum 作为整数

iCustListNum = 应用程序.CustomListCount + 1
应用程序.AddCustomList ListArray:=Range("A2:A100")

出现错误时转到错误:

'对列表进行排序
范围 ("A1:B100").排序键 1:=范围 ("A1"), 顺序 1:=xlAscending, 顺序自定义:=iCustListNum, _
    键 2:=范围(“B1”),顺序 2:=xlAscending,标题:=xlYes,_
    MatchCase:=False,方向:=xlTopToBottom

'清理
呃:
应用程序.DeleteCustomList ListNum:=iCustListNum

子目录结束

相关内容