我必须编写一个函数来在 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" ?比较同一数组/范围的两个值的正确方法是什么?