2017-10-27 19 views
0

私は、1枚の欄( "すべて")の欄にファンド名を、他の欄( "EDITED")の対応する欄にファンド名を返します。私はファンドの名前と範囲を範囲として定義し、VBAのキーとしてリターンを使って名前をソートしようとしました。私の目的は、各列が別の週を表すので、すべての列を並べ替えることです。私のコードは下にあります。前もって感謝します。VBAの基準として他の範囲を使用して可変範囲を並べ替える

Sub Sortmydata() 

Dim rng As Range 

Dim keyrng As Range 


For i = 5 To 385 


    Set rng = Worksheets("All").Range(Cells(3, i), Cells(385, i)) 
    Set keyrng = Worksheets("EDITED").Range(Cells(3, i), Cells(385, i)) 

    rng.Select 

    Selection.Sort key1:=keyrng, _ 
    order1:=xlAscending, Header:=xlNo 

    i = i + 1 

Next i 


End Sub 

答えて

0

こんにちは、並べ替えはキーの値と同じ範囲でのみ行うことができます。 私は並べ替えたい値とキー値を使って疑似範囲を作成しました。 擬似範囲でソートされ、私が望む範囲にコピー・ペーストします。 254

Worksheets("Tier2").Activate 

Set sortrange = Range(Cells(3, i), Cells(45, i)) 

sortrange.Copy 
Range("IW3").PasteSpecial xlPasteValues 




Worksheets("EDITEDTier2").Activate 

Set keyrange = Range(Cells(3, i), Cells(45, i)) 

keyrange.Copy 

Worksheets("Tier2").Activate 

Range("IX3").PasteSpecial xlPasteValues 

Range("IW3:IX45").Sort Key1:=Range("IX3:IX45"), _ 
    order1:=xlDescending, Header:=xlNo 

Range("IW3:IW45").Copy 

sortrange.PasteSpecial xlPasteValues 

に対するI = 5の範囲は

として範囲 薄暗いsortrangeとしてワーク 薄暗いKEYRANGEとして おかげで、

サブSORT2()

薄暗いWSの次のI

エンドサブ

0

コードからi = i + 1を削除すると、forループが自動的に増加します。

i = i + 1では、列をスキップします。

+0

私はまだ私の主な問題は、私が定義した範囲でそれをしました。コードが "keyrng"の範囲に移動すると、エラーが発生します。私は同じワークブックで2つの異なるシートに2つの範囲を設定できると思った。それらのうちの1つをキーとして使用して、他のものを並べ替えることができます。これは可能ですか? – skatip

+0

いいえ、キーはソート範囲にある必要があります あなたがしたいと思うものは、他の列の順番で列をソートすることです。これは「カスタムソート順」です https://stackoverflow.com/questions/ 6100944/code-an-excel-vba-sort-a-custom-order-and-a-value-commonsを含む –

+0

はい、それは私がしたいことです。あなたが送信したリンクをチェックしましたが、わかっていればわかりません(私はそれを私のデータに適用するためにそれを理解する必要があります:))この場合、他の範囲の疑似データを作成するために、ソートされたデータをソートして最初のどこにでもコピーできます。ありがとう。 – skatip

関連する問題