[[20200507112541]] 『任意の順番に並び替えるマクロ』(たも) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『任意の順番に並び替えるマクロ』(たも)

表の順番を任意の順番に並び替えるプログラムを考えています。
下記に例を記載します

・並び替え前
大項目  小項目
肉    牛
肉    鶏
魚    (空白セル)
魚    まぐろ
魚    カツオ
魚    鯛
野菜   人参
野菜   じゃがいも
野菜   大根

・並び替え後
大項目  小項目
魚    (空白セル)
魚    カツオ
魚    まぐろ
野菜   大根
野菜   じゃがいも
魚    鯛
肉    牛
肉    鶏
野菜   人参

のように、おおまかに大項目別に並んでいるものの「鯛」や「人参」のように並んでいなかったり、空白セルを大項目の中の一番上に持っていきたかったりというものです。
並び替え前のデータは毎回違い、これ以外の項目もあったり逆に項目が少なかったりもするが、最低限この任意の順番に並び替えたいというのが条件です。

大体をSortオブジェクトでCustomOrderを使って並び替えた後に例外部分を整えたらいいかと思いましたが、なかなかうまく考えられず。。
いい方法があれば教えていただけませんでしょうか。

拙い説明で申し訳ありませんが、どうぞよろしくお願いします。

< 使用 Excel:Excel2016、使用 OS:unknown >


 参考に
 Sub Test()
    Dim myRang As Range, c As Range
    With ActiveSheet
        Set myRang = .Range("A1", .Cells(Rows.Count, "A").End(xlUp)).Resize(, 2)
        For Each c In myRang
            If c.Value = "" Then c.Value = "空白"
        Next
        With .Sort
            With .SortFields
                .Clear
                .Add2 Key:=Range("B1"), _
                    SortOn:=xlSortOnValues, _
                    Order:=xlAscending, _
                    CustomOrder:="空白,カツオ,まぐろ,大根,じゃがいも,鯛,牛,鶏,人参", _
                    DataOption:=xlSortNormal
            End With
            .SetRange Range("A1", Cells(Rows.Count, "A").End(xlUp)).Resize(, 2)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlStroke
            .Apply
        End With
        myRang.Replace What:="空白", Replacement:="", LookAt:=xlWhole, SearchOrder:=xlByRows, MatchCase:=True
    End With
 End Sub
(ピンク) 2020/05/07(木) 12:55

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.