まずは、以下をご覧ください。

組織の階層がバラバラです。これをソートするコードです。

本コードはアクセス権付きフォルダ作成ツールに使われています。  

並び替え(ソート)コード

いつも私が使っているソートのコードを記載します。

' ソート
Sub SortSample()

    Dim wsBoss  As Worksheet
    Set wsBoss = ThisWorkbook.Worksheets("Boss")
    Dim endRow As Long
    ' 最下行取得
    endRow = wsBoss.Cells(Rows.Count, 2).End(xlUp).Row
    ' Bossシートのソート
    ' 空白組織は"0"埋め(完全一致)
    wsBoss.Range("C3:E" & endRow).Replace What:="", Replacement:="0", LookAt:=xlWhole
    'フィルター(昇順)
    With wsBoss.Sort
        ' 過去のソート設定を削除
        .SortFields.Clear
        ' ソートのキーを設定
        .SortFields.Add Key:=Range("B2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Range("C2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Range("D2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SortFields.Add Key:=Range("E2"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        ' ソートの範囲を指定
        .SetRange wsBoss.Range("A2:AW" & endRow)
        ' ヘッダーの有無指定
        .Header = xlYes
        ' 並び替え実行
        .Apply
    End With
    ' 一時的に"0"を埋めた組織は組織をブランクに置換(完全一致)
    wsBoss.Range("C3:E" & endRow).Replace What:="0", Replacement:="", LookAt:=xlWhole
    
End Sub

 

並び替え(ソート)コードの実行結果

以下の画像を見ていただければ、順序のイメージがつくと思います。 人事部の上位階層が上にきています。 また、1,2,3係もちゃんと並んでいますね!

実行前

実行後

 

さいごに

VBAは以下に自分で汎用的に使えるサンプルコードを持っておけるかです! ソートも結構使いますので、ぜひご活用くださいませ!   ではまた。