Question

À l’aide de VBA, j’ai un ensemble de fonctions qui renvoient un ADODB.Recordset contenant toutes les colonnes sous la forme adVarChar . Malheureusement, cela signifie que les valeurs numériques sont triées sous forme de texte. Alors 1,7,16,22 devient 1,16,22,7

Existe-t-il des méthodes permettant de trier les valeurs numériques sous forme de colonnes de texte sans avoir à changer le type de la colonne?

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

Remarque: j'utilise Project 2003 et Excel 2003 et référence à la bibliothèque Microsoft ActiveX DataObject 2.8

.
Était-ce utile?

La solution

Pavé gauche avec des zéros avec au moins autant que le nombre maximum de chiffres. par exemple

0001 0010 0022 1000

Vous pouvez utiliser Right $ () pour accomplir cela.

Autres conseils

Utilisez la fonction Val () pour trier numériquement une colonne de texte. Exemple:

SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top