配列のソート@Excel マクロ・VBA

配列のソートを行います。

標準で配列のソートが見当たらないので、
ADODB.Recordsetを用います。

Microsoft ActiveX Data Objectを参照設定します。

ADODB.Recordsetを生成します。
フィールドを作成します。
以下では、IDという名前のフィールドを追加します。

通常は、DBなどに接続しますが、この場合必要ないので、
そのまま、RecordSetをOpenします。

配列をループして、RecordSetのIDフィールドに追加します。
Sortを指定します。「ID ASC」はIDを昇順でソートの意味です。

ソートした結果を抽出します。
以下では、RecordSetをループして、シートに書き出しています。



Sub test()

Dim rs As ADODB.Recordset
Dim str(9) As String

Dim rowNo As Integer

On Error GoTo Err

'ソートしたい配列
str(0) = 1
str(1) = 0
str(2) = 3
str(3) = 5
str(4) = 4
str(5) = 7
str(6) = 6
str(7) = 2
str(8) = 11
str(9) = 9

'RecordSet生成
Set rs = New ADODB.Recordset

'フィールド追加 数字(長さ100)、文字はadChar
rs.Fields.Append "ID", adInteger, 100

'Recordsetオープン
rs.Open


'配列を値にRecordSetに格納
For rowNo = 0 To UBound(str)
    rs.AddNew "ID", str(rowNo)
Next


'ソート ASC:昇順、DESC:降順
'rs.Sort = "ID ASC"
rs.Sort = "ID DESC"

'ソートしたデータ抽出
rowNo = 1
Do While rs.EOF = False

    'ソートしたデータをシートに書き込み
    Worksheets("Sheet1").Cells(rowNo, 1).Value = rs.Fields("ID").Value

    rowNo = rowNo + 1

    '次のレコード
    rs.MoveNext
Loop

'クローズ
rs.Close
Set rs = Nothing

Exit Sub

Err:
Set rs = Nothing
MsgBox (Err.Description)
End Sub




Copyright (C) Excelマクロ・VBAのお勉強. All Rights Reserved.