在 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
快速而肮脏的:-
- 将 A 列的内容复制到记事本中,然后重新复制到剪贴板。
- 选择两列。
- 选择排序功能并使用“自定义列表”顺序对 A 列进行排序。
- 将剪贴板中的数据输入自定义列表。
- 在排序功能中添加一个级别,然后按 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 子目录结束