他正在回答你的问题。你问,有没有办法在没有循环的情况下找到排序?
他说不。你的眼睛,我的眼睛可以看出它是否已分类。但是您如何期望 Excel/计算机在不通过集合元素的情况下这样做呢?
当数据在数组中时,您需要遍历其元素。希望很清楚。
所以我能说的最好的,
- 如果需要,用逗号分隔符将其拆分为变体。但不是必需的,因为 Array() 可以将元素放入一维变体中
- 将其转储到
Range
使用转置
使用工作表排序方法/功能对整个范围进行排序
---> 所以你知道它现在已经排序了。
- 然后转回一个变体数组
一些代码片段可以让您朝着这个方向前进:
Option Explicit
Sub omgArraySort()
Dim inputArray As Variant
Dim outputArray As Variant
Dim upperB as Long
inputArray = Array("9/3/2012 4:57:02 AM","22/3/2012 5:57:02 AM", _
"9/5/2012 8:57:02 AM","9/3/2011 4:57:02 AM")
'-- sorted array
outputArray = sortRange(inputArray)
upperB = UBound(iArray, 1) '-- for 1D array you may also use UBound(iArray)
If (Err.Number <> 0) Then '-- if there's an error, it's erro code is > 0
MsgBox "Dates sorted, not empty"
End If
End Sub
'-- dump into sheet and sort in the sheet and dump back into the array
Function sortRange(ByVal iArray As Variant) As Variant
Dim rngSort as Range
Dim i As Long
Set rngSort = WorkSheets(1).Range("B2")
i = Ubound(iArray,1)
With rngSort.Resize(i)
.Value = WorksheetFunction.Transpose(iArray)
.Sort rngSort, xlDescending, Header:=xlNo
sortRange = .Value
End With
End Function
在处理大量数据时,从工作表到代码的流量会降低性能。
请务必知道,当 SO 中具有可信度的人回答(例如 Ekkehard 的回答)时,您必须注意。他们没有正当理由不说。