2017-11-30 7 views
1

私はいくつかの基準でデータをソートするソートコードを持っています。しかし、増加する順番ではなく、毎回4つずつ増加するはずです。例として、私が数0、1、4、5、8、および9があるかもしれませんが、私は彼らが0、4、8としてリストされたいた後、1、5、9データを4の増加でソートする

Dim num As Range 
Dim sortcode As Range 
Dim sortnum As Range 
Dim firstsort As Range 
rangevalue = ("I2:I" & rlastrow) 
Set firstsort = Range(rangevalue) 

rangevalue = ("L2:L" & rlastrow) 
Set sortcode = Range(rangevalue) 

rangevalue = ("J2:J" & rlastrow) 
Set sortnum = Range(rangevalue) 

wr.Sort.SortFields.Clear 
    wr.Sort.SortFields.Add Key:=firstsort _ 
     , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    wr.Sort.SortFields.Add Key:=sortcode _ 
     , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    wr.Sort.SortFields.Add Key:=sortnum _ 
     , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With wr.Sort 
     .SetRange Range("A1:L" & rlastrow) 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 

はそれが可能ですsortnumフィールドで自分のコードを変更するには、順序を増やすのではなく4を増やす必要がありますか?

+2

'= MOD(originalnumber、4)'を計算したヘルパー列を追加し、元の数値よりも高い優先度で4の法をソートすることができます。 – YowE3K

+0

YowE3Kの提案を使用するか、各n番目の番号を見つけて検出する関数を使用して、各行がこれに編成された新しいスプレッドシートを作成するのが最適かもしれません – Maldred

答えて

2

@ YowE3Kコメントはヘルパーコラムについては音声アドバイスです。

別のオプション:カスタムソート順を使用します。

あなたのリストが小さくて管理している場合は、手動でこのようにそれを書くことができます:

wr.Sort.SortFields.Add Key:=firstsort _ 
    , SortOn:=xlSortOnValues, Order:=xlAscending, _ 
    CustomOrder:= "0,4,8,12,16,1,5,9,13,17,2,6,10,14,18,3,7,11,13,19", _ 
    DataOption:=xlSortNormal 

これだけの種類0

19例:

enter image description here


リストが大きい場合は、プログラムでカスタムオーデr文字列を必要な大きさに変換し、変数に設定します。

CustomOrder:=mySortString 
関連する問題