2017-03-27 5 views
1

Ich bin ein finanzieller Monte Carlo, und als letzten Schritt möchte ich die gespeicherten Ergebnisse sortieren. Ich habe ein Blatt, das alle simulierten Ergebnisse in Zelle D21 enthält: BM ## wobei ## = Anzahl der Simulationen + 20. In den Zeilen über 21 habe ich verschiedene Statistiken, (min, max, std dev, etc).Sortieren von Daten in VBA

Jedes Mal wenn ich dies führe, sortiert es sowohl die Ausgabezeilen als auch die Zeilen darüber. I.e. Es sortiert nicht meinen benannten Bereich. Hier ist mein Code: (Anmerkung „Zähler“ ist früher in meinem Code als eine ganze Zahl genannt und ist die Anzahl der Iterationen, die ausgeführt wurden

Worksheets("Sand Price").Activate 
Dim SortRange As Range 
Set SortRange = Worksheets("Sand Price").Range("D21:BM21").Resize(Counter, 62) 
SortRange.Interior.ColorIndex = 20 

Range("SortRange").Sort Key1:=Range("SortRange"), _ 
Order1:=xlAscending, Header:=xlNo 

Was frustrierend ist, dass ich die Interior.ColorIndex hinzugefügt haben. Befehl, um zu verfolgen, was passiert. Nur meine Ausgabezeilen werden Farbe, so dass in diesem Schritt der richtige Bereich abgreift. Aber im nächsten Schritt ist es nicht auf Sortierbereich beschränkt. Hinweis, ich habe hinzugefügt ".cells (1, 1) nach "Key1: = range (" SortierungRange ")" und das hat den Trick auch nicht gemacht.

+0

Worauf weist der benannte Bereich "SortRange" hin? –

+1

Vielleicht meinst du 'SortRange.Sort Key1: = SortRange.Cells (1)'? –

+0

Ich habe versucht Zellen (1,1), Zellen (1,0), Zellen (0,1), Zellen (0,0), und auf Ihren Vorschlag Zellen (1), keiner von ihnen arbeitete, leider – Patrick

Antwort

0

Ich bin mir nicht sicher, was Sie brauchen, weil ich nicht verstehe, was Sie zu erreichen versuchen, basierend auf dem, was Sie sind Sprich: Obwohl Ihre SortRange wird horizontal auf Ihrer berechneten Zeile gesetzt D21 auf der linken Seite zu BM21 auf der rechten Seite, wenn das ist, was sie sind. Sie sagen, dass Ihr benannter Bereich D21 zu BM21 ist und es sortiert, aber dann sagt, dass es nicht sortiert? Wenn das der Fall ist, wie lautet Ihr benannter Bereich? D1: BM21 und NICHT D21: BM21?

D1 bis BM1 [Namen der Spalten]

D2 zu BM2 Werte

... (D3 - D19 bis BM3 - BM19) -Werten

D20 zu BM20-Werte

D21 bis BM21 ~ tot als/output/Ihr benannten Bereich

Bereich Named = Set SortRange = Worksheets("Sand Price").Range("D21:BM21").Resize(Counter, 62)

Worksheets("[Sand Price]").Activate 
Dim SortRange As Range 

Set SortRange = Worksheets("[Sand Price]").Range("D1:BM21").Resize(Counter, 62) 
SortRange.Interior.ColorIndex = 20 

Range("SortRange").Sort key1:=Range("SortRange"), _ 
order1:=xlAscending, header:=xlNo 

Hinzugefügt Klammern Name [Sand Price] wegen Namensraum Arbeitsblatt. Geändert von D21:BM21 zu D1:BM21. In den ersten Buchstaben für Key zu key, Order zu order und Header zu header geändert.

Etwas anderes zu sehen ändert Range("SortRange").Sort-Columns("SortRange").Sort (oder was Herr Williams wies darauf hin), weil die Art und Weise haben Sie es selbst erscheint Aufruf werden auf sich selbst (die eine Reihe ist), da Sie Dim SortRange As Range dann erklärt versuchen zu tun Range("SortRange") was entspricht zu sagen SortRange("SortRange"), es sei denn, ich habe dies falsch interpretiert?

+0

Sorry, ich war nicht klarer. Ich führe Simulationen durch. Die Ergebnisse jeder Simulation werden von anderen Standorten in dieses Blatt (Sandpreis) kopiert. Die erste Simulation füllt den Bereich D21: BM21, der zweite geht in D22: BM22 usw., bis der tausendste Platz D1021: BM1021 belegt. Ich möchte dann alle Daten nach Zeilen unter Verwendung der Informationen in der ersten Spalte sortieren. "Counter" ist eine ganze Zahl, die bei Null beginnt, und bei jeder Iteration der Simulation wird sie um 1 erhöht. Also, mit einer 1000-Iteration-Simulation am Ende "Counter" = Null. – Patrick

+0

Also mein benannter Bereich "SortierungRange" bedeutet in diesem Beispiel, von D1021: BM1021 zu gehen. Wenn es eine Simulation mit 500 Iterationen gewesen wäre, wäre es D521: BM521. Ich möchte diesen Bereich sortieren. Wenn ich renne, scheint es, den Bereich D7: BM1021 zu sortieren (in dem Beispiel mit 1000 Iterationen). Auch hier weiß ich, dass der angegebene Bereich korrekt ist, denn wenn ich den benannten Bereich einfärbe, funktioniert das korrekt. Es muss das Sortieren sein, aber ich habe 100 Message Boards durchgemacht und kann den Fehler nicht sehen. – Patrick

+0

Ihre Änderung "Geändert von D21: BM21 zu D1: BM21" ist nicht korrekt. Ich möchte wirklich in D21 am weitesten links und in der höchsten Ecke starten. Nicht D1. Würde es funktionieren, "Spalten" anstatt "Range" zu sortieren? Der Bereich, den ich sortieren möchte, ist nicht die einzige Information auf dem Blatt. Der Bereich D1: BM20 ist vollständig belegt und NICHT zum Sortieren vorgesehen. Schließlich glaube ich, dass Sie nicht korrekt sind, dass Sortrange eine Zeile ist. Wie bereits erwähnt, verwende ich die Interior.ColorIndex-Funktion auf SortierungRange, und es ist definitiv Färbung der richtige Bereich, der in einer 100-Iteration-Simulation SortRange wird D21: BM121 – Patrick