Excel の VBA で特定の範囲を並べ替える関数を作成する必要があります。(バブルソート)私は次のことをしました:
Function MySort(M2 As Range)
Dim r As Integer
r = M2.Rows.Count
Dim M1 as range
M1 = M2
Dim buffer
For i = 0 To r
For j = i To r
If (M1.Item(i, 0) > M1.Item(j, 0)) Then
buffer = M1.Item(i, 0)
M1.Item(i, 0) = M1.Item(j, 0)
M1.Item(j, 0) = buffer
End If
Next j
Next i
MySort = M1
End Function
問題 :
- 「#VALUE」を返します
- Range を配列に変換しようとしました
- M2 を M1 にキャストしない場合、関数はソートされていないリストを返します
- 基底1と基底0で試しました
次の例で強調されている主な問題を特定したと思います。
Function TestArray(M1 As Range)
r = M1.Rows.Count
Dim M2 As Range
Dim M3()
ReDim M3(r)
M3 = M1
M2 = M1
TestArray = M3(0, 0) ' or M2.item(0, 0)
End Function
この関数は「#VALUE」を返します。
M2.item(0, 0) が "#VALUE" を返すのはなぜですか? 同じ配列/ Range の 2 つの値を比較する正しい方法は何ですか?