標題:
請教資料依2欄排序
[打印本頁]
作者:
morris0914
時間:
2012-7-18 13:55
標題:
請教資料依2欄排序
有個排序問題麻煩幫忙~~
E欄14到16945開始排序從小到大,
D14到16945開始遇到E欄遇0為從小到大,遇到E欄為1則從大到小,遇到E欄為2則從小到大,
遇到E欄為3則從小到大,依此類推,而且其它例資料也需跟著移動,資料如附件。
作者:
Hsieh
時間:
2012-7-18 14:24
回復
1#
morris0914
依你所述,只有E欄為1時排序才由大到小
所以,只要先把所有資料依據E欄為主要鍵,D欄為次要鍵由小到大(遞增)排序後
再篩選出E欄為1的資料,然後依照D欄由大到小(遞減)排序
[attach]11727[/attach]
作者:
morris0914
時間:
2012-7-18 14:59
回復
2#
Hsieh
感謝你的幫忙,另外請教如果E欄有300筆,就需作300次,如果用VBA要如何寫,在下是用巨集跑,如何縮短程式(如下,只跑四筆資料),謝謝。
Sub Macro2()
'
' Macro2 Macro
' 11 在 2012/7/18 錄製的巨集
Rows("13:13").Select
Selection.AutoFilter
Range("A13:AF16945").Sort Key1:=Range("E13"), Order1:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
, SortMethod:=xlStroke, DataOption1:=xlSortNormal
Selection.AutoFilter Field:=5, Criteria1:="0"
Range("A13:AF16945").Sort Key1:=Range("D13"), Order1:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
, SortMethod:=xlStroke, DataOption1:=xlSortNormal
Selection.AutoFilter Field:=5, Criteria1:="1"
Range("A13:AF16945").Sort Key1:=Range("D13"), Order1:=xlDescending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
, SortMethod:=xlStroke, DataOption1:=xlSortNormal
Selection.AutoFilter Field:=5, Criteria1:="2"
Range("A13:AF16945").Sort Key1:=Range("D13"), Order1:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
, SortMethod:=xlStroke, DataOption1:=xlSortNormal
Selection.AutoFilter Field:=5, Criteria1:="3"
Range("A13:AF16945").Sort Key1:=Range("D13"), Order1:=xlDescending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
, SortMethod:=xlStroke, DataOption1:=xlSortNormal
Selection.AutoFilter Field:=5, Criteria1:="4"
Range("A13:AF16945").Sort Key1:=Range("D13"), Order1:=xlAscending, Header _
:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
, SortMethod:=xlStroke, DataOption1:=xlSortNormal
Selection.AutoFilter Field:=5
Selection.AutoFilter
End Sub
作者:
Hsieh
時間:
2012-7-18 19:19
回復
3#
morris0914
不懂你D欄遞增或遞減的判斷規則如何?
應該是0或偶數的E欄為遞增,奇數則遞減
如果是這樣,試試以下程式碼
Sub nn()
Dim Rng As Range, Rng1 As Range
Set Rng = Range("A10").CurrentRegion
x = Application.Min(Rng.Columns(5))
y = Application.Max(Rng.Columns(5))
For i = x To y
Rng.AutoFilter Field:=5, Criteria1:=i
k = i Mod 2
Set Rng1 = Rng.Offset(1).SpecialCells(xlCellTypeVisible)
Rng1.SpecialCells(xlCellTypeConstants).Sort key1:=Rng1.Cells(1, 4), order1:=k + 1, header:=xlGuess
Rng.AutoFilter
Next
End Sub
複製代碼
作者:
morris0914
時間:
2012-7-19 09:27
回復
4#
Hsieh
感謝板主的指導,我再試試看,謝謝。
歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)