• ベストアンサー

指定した文字列を検索し、その行を並び替えしたいです。

指定した文字列を検索し、その行を並び替えしたいです。 (例) 魚|さば|5|2010/04/30 肉|うし|3|2010/03/21 魚|いか|7|2010/02/24 魚|たこ|9|2010/02/05 肉|ぶた|2|2010/03/14 上記の表で1列目の行を、3列目の「数量」または4列目の「日付」で並び替えがしたいのです。 「魚日付」「魚数量」「肉日付」「肉数量」のボタンを作成しマクロで処理したいと思います。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

Sub 魚数昇順()  Application.ScreenUpdating = False  Call setup  Call main("魚", "数", "昇順")  Call cleanup  Application.ScreenUpdating = True End Sub Sub 魚数降順()  Application.ScreenUpdating = False  Call setup  Call main("魚", "数", "降順")  Call cleanup  Application.ScreenUpdating = True End Sub Sub 魚日昇順()  Application.ScreenUpdating = False  Call setup  Call main("魚", "日", "昇順")  Call cleanup  Application.ScreenUpdating = True End Sub Sub 魚日降順()  Application.ScreenUpdating = False  Call setup  Call main("魚", "日", "降順")  Call cleanup  Application.ScreenUpdating = True End Sub Sub 肉数昇順()  Application.ScreenUpdating = False  Call setup  Call main("肉", "数", "昇順")  Call cleanup  Application.ScreenUpdating = True End Sub Sub 肉数降順()  Application.ScreenUpdating = False  Call setup  Call main("肉", "数", "降順")  Call cleanup  Application.ScreenUpdating = True End Sub Sub 肉日昇順()  Application.ScreenUpdating = False  Call setup  Call main("肉", "日", "昇順")  Call cleanup  Application.ScreenUpdating = True End Sub Sub 肉日降順()  Application.ScreenUpdating = False  Call setup  Call main("肉", "日", "降順")  Call cleanup  Application.ScreenUpdating = True End Sub Sub setup()  Dim r As Long  Range("A:A").Insert  r = Range("B65536").End(xlUp).Row  With Range("A1:A" & r)   .Formula = "=ROW()"   .Value = .Value  End With  Range("A1:E" & r).Sort key1:=Range("B1"), header:=xlNo End Sub Sub main(a1, a2, a3)  Dim h1 As Range  Dim h2 As Range  Set h2 = Range("B:B").Find(what:=a1, after:=Range("B1"), searchdirection:=xlPrevious)  Set h1 = Range("B:B").Find(what:=a1, after:=h2, searchdirection:=xlNext)  Range(h1, h2.Offset(0, 4)).Sort key1:=h1.Offset(0, IIf(a2 = "数", 2, 3)), order1:=IIf(a3 = "昇順", xlAscending, xlDescending), header:=xlNo End Sub Sub cleanup()  Dim r As Long  r = Range("B65536").End(xlUp).Row  Range("A1:E" & r).Sort key1:=Range("A1"), order1:=xlAscending, header:=xlNo  Range("A:A").Delete End Sub >1列目の行を、3列目の「数量」または4列目の「日付」で並び替えがしたいのです。 判ってる人には意味が判っても,そうでない人にはさっぱりです。 もう一言丁寧に,結果の例まで欲しかったですね。

関連するQ&A