2

セル A40 で始まり、A46 で終わる 7 つの値の列を並べ替えようとしています。私はバブルソートを使用しており、2 つのプロシージャを作成しています。しかし、実行すると、VBA は下付き文字が範囲外であることを通知します...コードのどこに問題があるか教えてください。

Sub dort()

    Dim plaga() As Variant
    plaga = Worksheets("Sheet3").Range("A40:A46").Value


    Call tri1(plaga)

    Dim Destination As Range
    Set Destination = Worksheets("Sheet3").Range("C40")
    Destination.Resize(7, 1).Value = plaga

End Sub

Sub tri1(plaga As Variant)


    Dim ligne_Deb As Long
    Dim ligne_Fin As Long

    ligne_Deb = LBound(plaga)
    ligne_Fin = UBound(plaga)

    Dim i As Long, j As Long
    Dim tmp As Long

        For i = ligne_Deb To ligne_Fin - 1
        For j = ligne_Fin To i + 1 Step -1
            If plaga(j) < plaga(j - 1) Then
            tmp = plaga(j)
            plaga(j) = plaga(j - 1)
            plaga(j - 1) = tmp
            End If
        Next j
        Next i

End Sub
4

1 に答える 1

2

私のコードのどこに問題があるのか​​ 教えてもらえますか?

plaga = Worksheets("Sheet3").Range("A40:A46").Value

範囲を配列に格納する場合、それは 1 次元配列ではありません。

コードを次のように変更します

plaga(j,1)

に注意して,1ください。それを随所に取り入れます。

例えば

For i = ligne_Deb To ligne_Fin - 1
    For j = ligne_Fin To i + 1 Step -1
        If plaga(j, 1) < plaga(j - 1, 1) Then
            tmp = plaga(j, 1)
            plaga(j, 1) = plaga(j - 1, 1)
            plaga(j - 1, 1) = tmp
        End If
    Next j
Next i

面白い読み物

于 2013-04-12T10:21:25.690 に答える