使用 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...