[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『任意の順番に並び替えるマクロ』(たも)
表の順番を任意の順番に並び替えるプログラムを考えています。
下記に例を記載します
・並び替え前
大項目 小項目
肉 牛
肉 鶏
魚 (空白セル)
魚 まぐろ
魚 カツオ
魚 鯛
野菜 人参
野菜 じゃがいも
野菜 大根
・並び替え後
大項目 小項目
魚 (空白セル)
魚 カツオ
魚 まぐろ
野菜 大根
野菜 じゃがいも
魚 鯛
肉 牛
肉 鶏
野菜 人参
のように、おおまかに大項目別に並んでいるものの「鯛」や「人参」のように並んでいなかったり、空白セルを大項目の中の一番上に持っていきたかったりというものです。
並び替え前のデータは毎回違い、これ以外の項目もあったり逆に項目が少なかったりもするが、最低限この任意の順番に並び替えたいというのが条件です。
大体を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.