
在 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
。 (如果 ColumnC
不可用,請使用該列。如果您的資料從第 1 行開始,請插入一個空白行,或(仍然)將上述內容放入 cell 中C2
,但放入1
cell 中C1
。)向下拖曳/填充。此(列C
)現在「記錄」您的自訂訂單;例如,C2
= 1、== C3
2C4
和C5
= C6
== C7
3 C
。B
答案2
又快又髒:-
- 將 A 列的內容複製到記事本中,然後重新複製到剪貼簿。
- 選擇兩列。
- 選擇排序功能並使用「自訂清單」順序對列 A 進行排序。
- 將剪貼簿中的資料輸入到自訂清單中。
- 在排序函數中新增一個級別,然後按 B 列「從小到大」排序。
答案3
我認為你最好的選擇是使用客製化訂單。如果不需要經常更新,您可以FILE>OPTIONS>ADVANCED>EDIT CUSTOM LISTS...
直接匯入整個範圍。然後在排序時使用它。
VBA 解決方案類似於
子排序() 將 iCustListNum 調暗為整數 iCustListNum = 應用程式.CustomListCount + 1 Application.AddCustomList ListArray:=Range("A2:A100") 出錯時轉到錯誤: '對你的清單進行排序 範圍(“A1:B100”).sort Key1:=範圍(“A1”),Order1:=xlAscending,OrderCustom:=iCustListNum,_ 鍵2:=範圍(“B1”),順序2:=xl升序,標題:=xl是,_ 符合大小寫:=False,方向:=xlTopToBottom '清理 呃: Application.DeleteCustomList ListNum:=iCustListNum 結束子