1

我的工作是在工作中修复假期电子表格,文件的问题是有直接引用,对其他工作表的间接引用和一些未引用的部分,所以如果你想把人们完全按照不同的顺序排列把整个事情搞砸了。所以,我一直在尝试做的是用人们的名字填充一个数组,对数组进行排序,然后与原始数组交叉引用并找到一个新顺序,以便可以在整个工作表中实施这个新顺序而不会搞砸.

问题是我似乎无法填充数组,我已经查看了此处的其他答案,但我确定我正在正确使用 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

谢谢你的帮助。艾米

4

2 回答 2

1

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

Dim Previous as variant
Previous = Range("a4:a" & maxrow)
于 2013-03-27T11:56:34.590 回答
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
于 2013-03-27T12:20:43.407 回答