| 
    
     |  | ▼学 さん: こんにちは。私の地域は、暑いではなく、熱いです・・・。
 皆さんの地域はいかがですか?
 
 >↓のようなデータがあり、それをソートしたいのですが、
 >A  B  C
 >0630 046 901567
 >0701 056 815528
 >0630 046 915200
 >0630 046 163522
 >0630 115 152968
 >0705 056 162000
 >0702 046 520001
 >0630 046 920006
 >
 >1.A列昇順、
 >2.B列昇順、
 >3.C列の上1桁で降順、
 >4.C列昇順
 >という条件(特に条件3から4)でソートをするには
 >どのようにしたらよいのでしょうか?
 >
 >※ソート後↓
 >A  B  C
 >0630 046 901567
 >0630 046 915200
 >0630 046 920006
 >0630 046 163522
 >0630 115 152968
 >0701 056 815528
 >0702 046 520001
 >0705 056 162000
 >
 >ご教授よろしくお願いします。
 >                              学
 問題点は、
 
 1. >3.C列の上1桁で降順、
 2. セルのソートはキーが3つしか指定できない点
 ですよね!!
 
 1.は、D列を作業領域にとりましょう。
 ここに「=value(mid(c1,1,1))」なんて入れると上1桁が表示されるので
 これをソート対象にします。
 
 2.は、こういうのは、パターンが決まっていて、
 最初にB列、D列、C列をキーにソート
 次にA列でソートします。
 これをコードにすると、
 
 '================================================================
 Sub main()
 Dim rng As Range
 Set rng = Range("a1", Cells(Rows.Count, 1).End(xlUp))
 With rng
 With .Offset(0, 3)
 .Formula = "=value(mid(c1,1,1))"
 .Value = .Value
 End With
 With .Resize(, 4)
 .Sort Key1:=Range("B1"), Order1:=xlAscending, Key2:=Range("D1") _
 , Order2:=xlDescending, Key3:=Range("C1"), Order3:=xlAscending, Header _
 :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
 , SortMethod:=xlPinYin
 .Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
 OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _
 :=xlPinYin
 End With
 .Offset(0, 3).Value = ""
 End With
 End Sub
 
 アクティブシートに例題のようなデータを配置して確認して下さい。
 
 |  |