Pregunta

Al usar VBA tengo un conjunto de funciones que devuelven un ADODB.Recordset donde todas las columnas aparecen como adVarChar . Desafortunadamente, esto significa que los números se ordenan como texto. Así que 1,7,16,22 se convierte en 1,16,22,7

¿Hay algún método que pueda ordenar los valores numéricos como columnas de texto sin tener que cambiar el tipo de columna?

Sub TestSortVarChar()

  Dim strBefore, strAfter As String

  Dim r As ADODB.RecordSet

  Set r = New ADODB.RecordSet
  r.Fields.Append "ID", adVarChar, 100
  r.Fields.Append "Field1", adVarChar, 100
  r.Open


  r.AddNew
  r.Fields("ID") = "1"
  r.Fields("Field1") = "A"

  r.AddNew
  r.Fields("ID") = "7"
  r.Fields("Field1") = "B"

  r.AddNew
  r.Fields("ID") = "16"
  r.Fields("Field1") = "C"

  r.AddNew
  r.Fields("ID") = "22"
  r.Fields("Field1") = "D"


  r.MoveFirst
  Do Until r.EOF
    strBefore = strBefore & r.Fields("ID") & " " & r.Fields("Field1") & vbCrLf
    r.MoveNext
  Loop

  r.Sort = "[ID] ASC"


  r.MoveFirst
  Do Until r.EOF
    strAfter = strAfter & r.Fields("ID") & " " & r.Fields("Field1") & vbCrLf
    r.MoveNext
  Loop

  MsgBox strBefore & vbCrLf & vbCrLf & strAfter

End Sub

NB: Estoy usando Project 2003 y Excel 2003 y estoy haciendo referencia a Microsoft ActiveX DataObject 2.8 Library

¿Fue útil?

Solución

Teclado izquierdo con ceros con al menos tantos como dígitos de número máximo. por ejemplo

0001 0010 0022 1000

Puedes usar Right $ () para lograr esto.

Otros consejos

Use la función Val () para ordenar numéricamente en una columna de texto. Ejemplo:

SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top