[[20060818163251]] 『3行まとめてソートできますか?』(yakushi) ページの最後に飛ぶ

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

 

『3行まとめてソートできますか?』(yakushi)

   A      B      C     
1  名前1  得点1
2       偏差値1 
3       順位 
4  名前2  得点2
5       偏差値2 
6       順位 
7  名前3  得点3
8       偏差値3 
9       順位 

 考えに考えて出来ませんでした。どなたか教えて下さい。 
 上のようなエクセル表(Exce2000)があります。   
 一人のデータが3行あります。
 得点でソートをかけ、かつ偏差値、順位も同時に得点と共に並べ替えたいのですが
 できるでしょうか? つまり3行同時に得点でソートをかけると言うことです。
 ちなみに、偏差値、順位を横一列に移動させることはしないわけです。
 名前は500名ほどあります。
 どなたか、教えて下さい。


 横に並べた方が使い勝手がよいと思いますが・・・
 マクロでやっつける方法です。
 (ROUGE)
'----
Sub test()
    Dim tbl1, tbl2, i As Long, ws As Worksheet
    Application.ScreenUpdating = False
    tbl1 = Worksheets("Sheet1").Range("A1").CurrentRegion.Resize(, 2)
    ReDim tbl2(1 To UBound(tbl1, 1) / 3, 1 To 4)
    For i = 1 To UBound(tbl1, 1) Step 3
        tbl2((i + 2) / 3, 1) = tbl1(i, 1)
        tbl2((i + 2) / 3, 2) = tbl1(i, 2)
        tbl2((i + 2) / 3, 3) = tbl1(i + 1, 2)
        tbl2((i + 2) / 3, 4) = tbl1(i + 2, 2)
    Next
    ReDim tbl1(1 To UBound(tbl1, 1), 1 To 2)
    Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
    ws.Range("A1").Resize(UBound(tbl2, 1), 4).Value = tbl2
    Erase tbl2
    ws.Range("A1").CurrentRegion.Sort Key1:=Range("D1"), Order1:=xlAscending, _
    Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    SortMethod:=xlPinYin, DataOption1:=xlSortNormal
    tbl2 = ws.Range("A1").CurrentRegion
    Application.DisplayAlerts = False
    ws.Delete
    Application.DisplayAlerts = True
    For i = 1 To UBound(tbl2, 1)
        tbl1(i * 3 - 2, 1) = tbl2(i, 1)
        tbl1(i * 3 - 2, 2) = tbl2(i, 2)
        tbl1(i * 3 - 1, 2) = tbl2(i, 3)
        tbl1(i * 3, 2) = tbl2(i, 4)
    Next
    With Worksheets("Sheet1")
        .Columns("A:B").ClearContents
        .Range("A1").Resize(UBound(tbl1, 1), 2).Value = tbl1
        .Activate
    End With
    Erase tbl1, tbl2
    Application.ScreenUpdating = True
End Sub

 並べ替えるだけなら作業列を使って
 C1,C2,C3セルに=B1と式を入れて
 3セル分セットで下にコピー
 C列で並べ替え

 なんてのも。

 (HANA)

 > ちなみに、偏差値、順位を横一列に移動させることはしないわけです。

 このためにややこしいことが起こるわけです。
 テータ処理の基本は 「1件1行」のデータにしておくことです。

 表示とか印刷の都合で1件のデータを複数行に分けているのであれば、
 データ処理のためのシートと表示のためのシートを分けて、リンクなり関数なりで
 つなぐのが普通ではないでしょうか。

 (P)

早速の回答ありがとうございます。
世の中にはやはり達人がいるものだと思い知りました。
〈ROUGE〉さん、 マクロ組んで下さってありがとうございました。試してみます。
(HANA)さん、   なにやら超簡単ですね。うまくいきそうです。
(P)さん、 おっしゃとおりだと思います。データはまさにそのために複数行にし         たものです。なんでもお見通しで・・・。

 ともかく、ありがとうございました。


コメント返信:

[ 一覧(最新更新順) ]


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