使用范围VBA填充数组

时间:2013-03-27 11:22:47

标签: arrays excel excel-vba range vba

我已经完成了在工作中修复假日电子表格的工作,文档的问题是有直接引用,间接引用其他工作表和一些未引用的部分,所以如果你想把人放在一个不同的命令它完全混淆了整个事情。所以,我一直在尝试做的是使用人名填充数组,对数组进行排序,然后与原始数据交叉引用并找到新订单,以便可以在整个工作表中实现此新订单而不会弄乱

问题是我似乎无法填充数组,我在这里查看了其他答案,但我确定我正在使用redim并且这往往是问题。

所以Previous是原始列表,Current是排序列表,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

感谢您的帮助。 艾米

2 个答案:

答案 0 :(得分:1)

Excel范围始终被视为具有2个维度,即使它们是单个列也是如此。 此外,您不需要重新设置变量数组 - 只需将范围指定给普通变量变量,它将创建包含二维数组的变体:

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

答案 1 :(得分:1)

你确实填充了数组,但你却以错误的方式对它们进行了解决。

为数组指定范围时,数组会自动重新定义为二维数组,一个用于行,另一个用于列。

由于您的范围只是一个列,因此第二个维度始终为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