使用 VBA 的板载排序功能
Using VBA's onboard sort function
我想对一个数组进行排序,因为我很懒,所以我想使用 EXCEL/VBA 的内置排序功能。
根据官方 MS Office 支持 worksheetfunctions.sort 也应该使用数组,请参阅 here。
这是我的第一次尝试。
Sub sorting()
Dim myArray1() As Double
Dim myArray2() As Double
ReDim myArray1(1 To 5)
myArray1(1) = 0.221157
myArray1(2) = -0.147981
myArray1(3) = -2.07119
myArray1(4) = 4.434685
myArray1(5) = -2.706056
myArray2 = WorksheetFunction.Sort(myArray1, 1, 1)
End Sub
这会产生类型不匹配错误,因此我已将代码调整为
Sub sorting()
Dim myArray1() As Variant
Dim myArray2() As Variant
ReDim myArray1(1 To 5)
myArray1(1) = 0.221157
myArray1(2) = -0.147981
myArray1(3) = -2.07119
myArray1(4) = 4.434685
myArray1(5) = -2.706056
myArray2 = WorksheetFunction.Sort(myArray1, 1, 1)
End Sub
代码运行没有任何错误,但是 myArray2 没有排序,它只是 myArray1 的副本。
我正在使用:
Microsoft® Excel® for Microsoft 365 MSO(版本 2204 内部版本 16.0.15128.20128)32 位
您的问题与第四个函数参数有关...
它是 Optional
,但如果不使用它 按行 排序 (False
)。由于您尝试对 没有任何行的一维数组 进行排序,因此它不会对任何内容进行排序。
你应该使用:
myArray2 = WorksheetFunction.Sort(myArray1, 1, 1, True)
这样的数组只有列...
注意:
要过滤的数组必须声明 As Variant
,就像从范围加载时需要声明的方式一样。上面的函数不接受这样声明的数组As Double
, As Long
...
我想对一个数组进行排序,因为我很懒,所以我想使用 EXCEL/VBA 的内置排序功能。 根据官方 MS Office 支持 worksheetfunctions.sort 也应该使用数组,请参阅 here。 这是我的第一次尝试。
Sub sorting()
Dim myArray1() As Double
Dim myArray2() As Double
ReDim myArray1(1 To 5)
myArray1(1) = 0.221157
myArray1(2) = -0.147981
myArray1(3) = -2.07119
myArray1(4) = 4.434685
myArray1(5) = -2.706056
myArray2 = WorksheetFunction.Sort(myArray1, 1, 1)
End Sub
这会产生类型不匹配错误,因此我已将代码调整为
Sub sorting()
Dim myArray1() As Variant
Dim myArray2() As Variant
ReDim myArray1(1 To 5)
myArray1(1) = 0.221157
myArray1(2) = -0.147981
myArray1(3) = -2.07119
myArray1(4) = 4.434685
myArray1(5) = -2.706056
myArray2 = WorksheetFunction.Sort(myArray1, 1, 1)
End Sub
代码运行没有任何错误,但是 myArray2 没有排序,它只是 myArray1 的副本。
我正在使用:
Microsoft® Excel® for Microsoft 365 MSO(版本 2204 内部版本 16.0.15128.20128)32 位
您的问题与第四个函数参数有关...
它是 Optional
,但如果不使用它 按行 排序 (False
)。由于您尝试对 没有任何行的一维数组 进行排序,因此它不会对任何内容进行排序。
你应该使用:
myArray2 = WorksheetFunction.Sort(myArray1, 1, 1, True)
这样的数组只有列...
注意:
要过滤的数组必须声明 As Variant
,就像从范围加载时需要声明的方式一样。上面的函数不接受这样声明的数组As Double
, As Long
...