数値としてのADOレコードセットテキストフィールドの並べ替え
質問
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);
所属していません StackOverflow