2017-08-09 19 views
0

複数のソートフィールドを使用した並べ替えについては、MSDN pageに行ってきました。基本的には、あなたのキーに番号をつけてソートフィールドと同じに設定するように言います。Excel VBAを使用した動的なネストされたソート

配列の値で範囲をソートするには、Nサイズの整数配列をループします。たとえば、シートに100列のデータがある場合は、列3,18と62に基づいてソートすることができます。そのN 3.問題だろうが、私は1からNまで

ループとして私はソートキー"key" & iに名前を付けることができないで、私がこれまで持っている何を:あなたは

With Worksheets("SalesRep").Sort 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    for i=1 to myArrayLength 
     SortFields.Add Key:=Range(cells(1,colNumArray(i)).address,cells(lastRow,colNumArray(i)).address) 
    next i 
    .Apply 
End With 

何をお勧めですか?あなたの範囲を参照して.Addressを必要としませんが、ワークシート修飾子を追加する必要があります、または任意の他のシートがアクティブなときにあなたのコードが失敗します

Dim sht As WorkSheet 

Set sht = .Worksheets("SalesRep") 

With sht.Sort 
    .SortFields.Clear '<<<<< clear any previous 
    .Header = xlYes 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    for i=1 to myArrayLength 
     SortFields.Add Key:=sht.Range(sht.cells(1,colNumArray(i)), _ 
            sht.cells(lastRow,colNumArray(i))) 

     'maybe cleaner as 
     'SortFields.Add Key:=sht.Cells(1, colNumArray(i)).Resize(lastRow, 1) 
    next i 
    .Apply 
End With 

+0

@TimWilliamsが追加されました。私はいくつかの変数に汎用名を使用しましたが、わかりました。 基本的に、私の配列の各値をループした後、ソートフィールドを適用します。 – wizlog

+0

それを実行するとどうなりますか? –

+0

エラーメッセージは表示されませんが、ソートされません。私は即時ウィンドウを使って適用された並べ替えフィールドを決定する方法を探しましたが、空の手が出てきました。 – wizlog

答えて

2

のようなものを試してみてください。

+0

私は参照した範囲内でシートを再参照しなければならないことに気付きませんでした。ありがとうございました。 – wizlog

関連する問題