2017-03-27 50 views
1

我正在運行財務蒙特卡羅,並且作爲最後一步我想對存儲的輸出結果進行排序。我有一張工作表,其中包含單元格D21中的所有模擬結果:BM ##其中## =模擬次數+ 20。在21以上的行中,我有各種統計數據,(最小,最大,標準開發等)。在VBA中排序數據

每次我運行這個,它都排序輸出行和它上面的行。即它不會對我命名的範圍進行排序。 這裏是我的代碼:(注「計數器」早在我的代碼作爲整數命名,是已運行的迭代次數

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 

什麼是令人沮喪的是,我已經添加了Interior.ColorIndex。命令來跟蹤發生了什麼,只有我的輸出行是彩色的,所以在這一步中,它正在選擇正確的範圍,但下一步它不限制SortRange.Note,我添加了「.cells(1, 1)在「Key1:= range(」SortRange「)」之後「,並且也沒有做到這一點。

+0

命名範圍「SortRange」指向什麼? –

+1

也許你的意思是'SortRange.Sort Key1:= SortRange.Cells(1)'? –

+0

我曾嘗試單元格(1,1),單元格(1,0),單元格(0,1),單元格(0,0),並在您的建議單元格(1),他們都沒有工作,可悲 – Patrick

回答

0

我不確定你需要什麼,因爲我不明白你想要什麼,說。雖然你的SortRange在左邊的計算行D21上水平設置爲BM21,如果這就是它們。你說你的命名範圍是D21BM21,它是排序,但然後說它不排序?如果是這種情況,那麼你的命名範圍是什麼? D1:BM21 and NOT D21:BM21

D1到BM1 [列的名稱]

D2到BM2值

...(D3 - D19到BM3 - BM19)值

D20至BM20值

D21 to BM21 tot ALS /輸出/你的命名範圍

命名範圍= 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 

加括號到工作表,因爲名稱空間名稱[Sand Price]。將D21:BM21更改爲D1:BM21。在Keykey,OrderorderHeaderheader的第一個字母上更改大寫字母到小寫字母。

別的東西來看待正在發生變化Range("SortRange").SortColumns("SortRange").Sort(或什麼威廉姆斯先生指出的),因爲你擁有它的方式出現在自己被調用本身(這是行),因爲你宣佈Dim SortRange As Range然後試圖要做Range("SortRange")這相當於說SortRange("SortRange"),除非我解釋過這個錯誤?

+0

對不起,我不是更清楚。我正在運行模擬。每個模擬的結果將從其他位置複製到此工作表(Sand Price)中。第一個模擬將填充範圍D21:BM21,第二個將進入D22:BM22,依此類推,直到第1,000個填充D1021:BM1021。然後,我想使用第一列中的信息按行排序所有數據。 「計數器」是一個從零開始的整數,並且隨着仿真的迭代,它增加1.因此,在末端「計數器」=零時進行1000次迭代仿真。 – Patrick

+0

因此,在本例中,我命名的範圍「SortRange」指的是從D1021:BM1021開始。如果它已經進行了500次迭代仿真,它將是D521:BM521。我想分類這個範圍。當我運行時,它似乎在排序範圍D7:BM1021(在1000次迭代示例中)。同樣,我知道命名範圍是正確的,因爲當我爲命名範圍着色時,這是正常工作的。它必須是Sort,但我已經通過了100個留言板,並且看不到錯誤。 – Patrick

+0

您的更改「更改D21:BM21到D1:BM21」不正確。我真的很想在D21的最左邊和最高角落開始。不是D1。它將工作排序「列」而不是「範圍」?我想排序的區域不是表格中的唯一信息。區域D1:BM20全部填充並且不意味着被分類。最後,我相信你不正確的是SortRange是一排。同樣,如前所述,我在SortRange上使用了Interior.ColorIndex函數,並且它確實着色了正確的範圍,在100次迭代模擬中SortRange將是D21:BM121 – Patrick