2013-03-27 82 views
1

我一直在考慮固定在一個休假的電子表格的工作陣列,該文件的問題是,有直接引用其他工作表間接引用和某些部件不被引用,所以如果你想把人們放在一個不同的秩序中,它會把整個事情搞得一團糟。所以,我一直試圖做的是用人名填充一個數組,然後對數組進行排序,然後與原始數據交叉引用並找到新訂單,以便在工作表中實現這個新訂單而不會搞亂所有的事情。填充與範圍VBA

的問題是,我似乎無法得到數組來填充,我看了看這裏的其他答案,但我敢肯定,我使用REDIM正常,並且往往是問題。

所以以前是原上市,目前是排序列表和立場是涉及以前到當前的數量。

Sub Sorting() 

Dim Previous() As Variant 
Dim Current() As Variant 
Dim maxrow As Long 
Dim i As Long 
Dim j As Long 
Dim k As Long 
Dim Position() As Long 
Dim rng As Range 
Dim strTemp As String 

k = 0 
i = 3 
maxrow = 3 

Do While Worksheets(1).Cells(i, 1).Value <> "STAT.HOL'S (ST)" 
maxrow = maxrow + 1 
i = i + 1 
Loop 
maxrow = maxrow - 1 

ReDim Previous(0 To maxrow) 
ReDim Position(0 To maxrow) 
ReDim Current(0 To maxrow) 
Previous = Range("a4", Range("a" & maxrow)) 
Current = Previous 
For i = 0 To maxrow 
For j = 0 To maxrow 
If Current(i) > Current(j) Then 
strTemp = Current(i) 
Current(i) = Current(j) 
Current(j) = strTemp 
End If 
Next j 
Next i 

For i = 0 To maxrow 
For j = 0 To maxrow 

If Previous(i) = Current(j).Value Then 
Position(k) = j 
k = k + 1 
End If 

Next j 
Next i 

End Sub 

感謝您的幫助。 艾米

+0

請問您的分揀作業中?如果沒有,請參閱此[Q + A](http://stackoverflow.com/q/152319/1490783)其他方法。另外,考慮縮進你的代碼,它會更容易閱讀。 – 2013-03-27 12:15:35

+0

當您將數組分配給上一次時,嘗試在末尾添加'.value'。同樣在你的'Range(「a4」,)'中,你不需要聲明第二部分是一個單獨的Range。 'Range(「a4」,「a」和maxrow).value'。 – Zaider 2013-03-27 12:23:09

+0

沒有我的排序不工作,我想事先得到第一部分工作。我縮進了我的工作,但這只是一些初步的代碼。感謝提示,我設法讓它工作。 – user1545643 2013-03-27 12:54:06

回答

1

你做填充數組,但你是以錯誤的方式來解決他們的問題。

當分配範圍的陣列,該陣列被自動redimensioned到一個二維陣列,一個用於行和一對列。

因爲你的範圍只是一個columm,第二維是始終爲1的行運行打完Previous = Range("a4", Range("a" & maxrow))你有作爲的尺寸數組:

Previous(1 to 10, 1 To 1) 

而且,你的循環可能會被改變對這樣的事情:

For i = LBound(Current, 1) To UBound(Current, 1) 

Next i 
1

Excel區域總是被視爲具有兩個維度,即使他們是一單個列。 你也不必REDIM你變長數組 - 只是分配範圍爲純Variant變量,它會創建一個包含二維數組的Variant:

Dim Previous as variant 
Previous = Range("a4:a" & maxrow)