[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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)
ともかく、ありがとうございました。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.