数値としてのADOレコードセットテキストフィールドの並べ替え

StackOverflow https://stackoverflow.com/questions/156084

  •  03-07-2019
  •  | 
  •  

質問

VBA iを使用すると、すべての列を adVarChar として ADODB.Recordset を返す一連の関数があります。残念ながら、これは数値がテキストとしてソートされることを意味します。 1,7,16,22は1,16,22,7になります

列のタイプを変更せずに、数値をテキスト列としてソートできるメソッドはありますか?

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:Project 2003とExcel 2003を使用しており、 Microsoft ActiveX DataObject 2.8ライブラリ

を参照しています
役に立ちましたか?

解決

少なくとも最大桁数のゼロを含む左パッド。 例:

0001 0010 0022 1000

Right $()を使用してこれを実現できます。

他のヒント

Val()関数を使用して、テキスト列を数値順に並べ替えます。例:

SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top