sort ordenar metodo key1 descending datos array vba date excel-vba vbscript sorting

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).