3

ADODB.RecordsetVBAを使用すると、すべての列を として返す関数のセットがありますadVarChar。残念ながら、これは数値がテキストとしてソートされることを意味します。したがって、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

注意: 私は Project 2003 と Excel 2003 を使用しており、Microsoft ActiveX DataObject 2.8 Libraryを参照しています。

4

2 に答える 2

3

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

0001 0010 0022 1000

これを行うには、Right$() を使用できます。

于 2008-10-01T03:19:27.040 に答える
2

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

SELECT ID, Field1
FROM tablename
ORDER BY Val(Field1);
于 2008-10-01T14:03:39.833 に答える