使用范围VBA填充数组

我已经得到了在工作中修复假期电子表格的工作,文档的问题是有直接引用,间接引用其他工作表和一些没有引用的部分,所以如果你想把人放在不同的顺序它完全把整个事情搞砸了。 所以,我一直试图做的是用人名填充一个数组,然后对数组进行sorting,然后与原始数据交叉引用,并find一个新的顺序,这样这个新的顺序就可以在整个工作表中实现而不会搞砸了。

问题是,我似乎无法得到数组填充,我已经看了在这里的其他答案,但我敢肯定,我正在使用redim,这往往是问题。

所以Previous是原来的列表,Current是sorting的列表,Position是前一个与当前相关的数字。

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 

谢谢你的帮助。 艾米

你填充数组,但是你是以错误的方式来解决它们的。

当您将一个范围分配给一个数组时,该数组将被自动重新调整为一个二维数组,一个用于行,一个用于列。

因为你的范围只是一个柱子,所以第二个维度总是1.所以在你运行了Previous = Range("a4", Range("a" & maxrow))你有一个数组,其大小为:

 Previous(1 to 10, 1 To 1) 

此外,您的For循环可以被改变成这样的东西:

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

Excel范围始终被视为有2个维度,即使它们是单个列。 另外,您不需要重新设置变体数组,只需将范围赋值给一个普通的variablesvariables,它将创build一个包含二维数组的变体:

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