假设我有一个数组 arr1,其中包含日期值,如下所示:
Arr1(50)=("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 上午")
Edit
他正在回答你的问题。你问,有没有办法在没有循环的情况下查找是否已排序?他说不。你的眼睛,我的眼睛都可以看到它是否已排序。但是,您如何期望 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 的答案)时,你必须注意。他们不这么说是没有正当理由的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)