Short Sort Max,Min code。错误下标超出范围

时间:2016-05-18 16:24:38

标签: vba sorting

Option Base 1

Sub Sort_Max_Min()  
Dim i, j As Integer  
Dim arrayOne As Variant  
Dim temp As Variant  


ReDim arrayOne(15)
arrayOne = Range("C2:C16")

For i = 1 To 14
    For j = 1 To 14
    If arrayOne(j) < arrayOne(j + 1) Then
        temp = arrayOne(j)
        arrayOne(j) = arrayOne(j + 1)
        arrayOne(j + 1) = temp
    End If
Next j  
Next i

Range("D2:D16") = arrayOne

End Sub

所以我将这个小代码放到我试图从最大值到最小值排序15个值的地方。我在单元格C2:C16中有随机整数值。我收到的&#34;下标超出范围错误&#34;我似乎无法接受,但我不认为我的数组索引超出范围。

还有更好的方法来做到这一点。我不认为让i和j从1到14变得最有效。请帮忙!

(顺便说一句,我在另一个更大的代码中使用它,这就是为什么我有变种而不仅仅是整数...我不认为这很重要。我只想把它弄下来但我仍然是新的vb无论如何; _;)

2 个答案:

答案 0 :(得分:1)

您的越界问题是因为工作表中的列默认为多维数组

Sub Sort_Max_Min()
    Dim i, j As Integer
    Dim arrayOne As Variant
    Dim temp As Variant
    arrayOne = Range("C2:C16")

    For i = 1 To 13
        For j = 1 To 13
        If arrayOne(j, 1) < arrayOne(j + 1, 1) Then
            temp = arrayOne(j,1)
            arrayOne(j, 1) = arrayOne(j + 1, 1)
            arrayOne(j + 1, 1) = temp
        End If
    Next j
    Next i

    Range("D2:D16") = arrayOne

End Sub

我运行此代码并在0秒内执行。不错,但我相信有一种更简单的排序方式。我仍然在学习和尝试不同的排序技术,所以我到目前为止并不是专家

答案 1 :(得分:0)

j = 14时你超出了范围,因为你的j+1 = 15超出了范围。

是的,有更好的方法可以做到;) 继续努力。