vba - ordenar - Verificación de orden de clasificación utilizando VBScript
vba excel order range (2)
Él está respondiendo tu pregunta. Usted preguntó, ¿hay alguna manera de encontrarlo si está ordenado sin un bucle? Él dijo no. Tus ojos, mis ojos pueden ver si está ordenado o no. Pero, ¿cómo espera que Excel / computadora lo haga sin pasar por elementos de colecciones?
Cuando los datos están en una matriz, necesita recorrer sus elementos. Espero que esté claro.
Así que lo mejor que puedo decir,
- dividirlo por el delimitador de comas en una variante si es necesario. Pero no es necesario ya que Array () puede poner elementos en una variante 1D
- volcarlo dentro de un
Range
usando Transpose utilice el método / función de clasificación de hojas para ordenar el rango como un todo
---> para que sepa que ahora está ordenado.
- luego volver a trasponer en una matriz variante
Algunos fragmentos de código para que vayas en esta dirección:
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
En términos de tráfico de hoja a código, puede ralentizar su rendimiento cuando maneja una gran cantidad de datos.
Y por favor, sepan que cuando alguien en SO que tiene respuestas de credibilidad (por ejemplo, la respuesta de Ekkehard) debe prestar atención. No lo dicen sin una razón adecuada.
Supongamos que tengo una matriz arr1 que contiene los valores de fecha como a continuación:
Arr1 (50) = ("9/3/2012 4:57:02 AM", "22/3/2012 5:57:02 AM", "5/09/2012 8:57:02 AM", "9 / 3/2011 4:57:02 AM ")
Editar
Dim CellCount
Dim Arr(10)
CellCount=0
Do Untill arr(CellCount)="" And Ubound(Arr)>9
If CStr(arr(CellCount) < arr(CellCount+1)) Then
MsgBox(arr(CellCount)&"is good")
Else
MsgBox(arr(CellCount +1)&"is bad")
Exit Do
End if
CellCount=CellCount+1
Loop
Ahora, ¿hay alguna manera directa, sin utilizar ninguna técnica de Looping, para averiguar si el Arr1 () tiene los valores de fecha ascendentes o no?
Gracias,
No, porque tiene que verificar los elementos hasta / hasta el primer contador de ejemplo (que podría ser el último).