74116


以下の画像の通りにしたいんです。

[![画像の説明をここに入力](https://i.stack.imgur.com/K5KBh.png)](https://i.stack.imgur.com/K5KBh.png)

それから、データは

[![画像の説明をここに入力](https://i.stack.imgur.com/PKqGT.png)](https://i.stack.imgur.com/PKqGT.png)

上にある画像のようにA1-100に並べてあります。

そのために、このコード：

[code]

    Sub specialSort()
        Dim i As Integer
        Dim j As Integer
        Dim inc As Integer
        Dim randomData(100) As Integer
        Dim n As Integer
        For n = 1 To 100
            randomData(n) = Cells(n, 1).Value
        Next
        For i = 1 To n - 1
            For j = n To i + 1 Step -1
                If randomData(j - 1) > randomData(j) Then
                    Dim tmp As Integer
                    tmp = randomData(j - 1)
                    randomData(j - 1) = randomData(j)
                    randomData(j) = tmp
                End If
            Next
        Next
        For inc = 1 To 100
            Cells(inc, 3).Value = randomData(inc)
        Next
    End Sub
    
[/code]

を作りました。

しかし、なぜか実行するときエラーが出ました↓

[![画像の説明をここに入力](https://i.stack.imgur.com/M6t58.png)](https://i.stack.imgur.com/M6t58.png)

誰か助けてくださると幸いです。


CC BY-SA 4.0
2021-02-18T12:23:35.847
74109
2021-02-18T15:45:44.887
2021-02-18T15:41:34.727
19110
44019
question
vba
VBAでバブルソートのアルゴリズムが実行できない：インデックスが有効範囲にありません


Windowsではない環境かあるいは制限か何かあるユーザーか使い方をやっているのでしょうか？  
エラー発生時にはこんなダイアログが出てデバッグをクリックするとデバッガに移れると思うのですが。  
[![エラーダイアログ](https://i.stack.imgur.com/3GC14.jpg)](https://i.stack.imgur.com/3GC14.jpg)

で、デバッガで停止時の場所とか各変数を見ると直ぐにわかると思いますが、以下の部分を終了した時点で`n`の値が`101`になっています。

[code]

        For n = 1 To 100
            randomData(n) = Cells(n, 1).Value
        Next
    
[/code]

そうすると、次の内側の`For`ループの最初で`j`が`101`になり、次の行の`randomData(j)`が`randomData(101)`ということになって配列のインデックス範囲外を指定したことになり、エラーになるわけです。

[code]

        For i = 1 To n - 1
            For j = n To i + 1 Step -1
                If randomData(j - 1) > randomData(j) Then
    
[/code]

上記の入れ子になっているそれぞれの`For`ループの`n`を使っている部分を数値そのものに変えるか、`n`の`For`ループが終わって`i`,`j`の`For`ループが始まる前に`n
= 100`と再設定すれば動作するでしょう。


CC BY-SA 4.0
2021-02-18T15:45:44.887
74116
2021-02-18T15:45:44.887
26370
74109
answer