以下の内容はhttps://htn20190109.hatenablog.com/entry/2024/07/12/015917より取得しました。


VBA(配列ソート)

 


連想配列を値でソートしてキーを動的配列として返す

 

-- 1. 開発タブの挿入でボタンを作成
ActiveXコントロールのものを使用する

-- 2. デザインモードONで作成したボタンをダブルクリックするとエディタが開くので下記コードを記載。デザインモードOFFで実行

※ 下記設定必要
Microsoft Scripting Runtime」の参照設定


Option Explicit

Private Sub CommandButton1_Click()

    
    '画面を更新しない
    Application.ScreenUpdating = False
    '確認メッセージを表示しない
    Application.DisplayAlerts = False
    
    
    Dim myDic As New Dictionary
    Set myDic = Nothing
    
    Dim i As Long
    
    For i = 1 To 5
        myDic.Add i, CStr(Int(100 * Rnd))
    Next i
    
    Dim myArr() As String
    Erase myArr
    
    Dim vkey As Variant

    For Each vkey In myDic
        Debug.Print "before myDic", vkey, myDic(vkey)
    Next
    

    
    
    '連想配列をソートして動的配列に格納。入力連想配列はゼロに破壊される
    Call SortDic(myDic, myArr())


    For Each vkey In myDic
        Debug.Print "after myDic", vkey, myDic(vkey)
    Next
        
    For i = LBound(myArr, 1) To UBound(myArr, 1)
        Debug.Print "after myArr", myArr(i)
    Next i
    
    
    
    '確認メッセージを表示する
    Application.DisplayAlerts = True
    '画面を更新する
    Application.ScreenUpdating = True

 

End Sub


'連想配列ソート
'連想配列はByValと指定してもByRefの挙動となる模様
Sub SortDic(ByRef sDic As Dictionary, ByRef dArr() As String)

    Dim minkey As Variant
    Dim minval As Long
    
    Dim i As Long
    
    i = 0

    Do While sDic.Count > 0
    
        minval = 2147483647
        Dim vkey As Variant
        
        For Each vkey In sDic
    
            If minval > CLng(sDic(vkey)) Then
                minval = sDic(vkey)
                minkey = vkey
            End If
        Next vkey
        
        ReDim Preserve dArr(i)
        dArr(i) = minkey
        i = i + 1
        sDic.Remove minkey
        
        
    Loop

End Sub

 




以上の内容はhttps://htn20190109.hatenablog.com/entry/2024/07/12/015917より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14