1330843944 添付ファイルのように、ExcelでA、B、C、D列をキーと考えてキーをユニークにし、E列の値をE列以降に横に並べ替えたいです。VBA等で簡単に実行できればと思うのですが、力不足なこともあり詳しい方がいらっしゃいましたらお願いします。


※Excel2007を使っています。
※A、B、C、D、E列は既に昇順に並んでいます。
※レコードは100万行近くあり、並べ替え後の必要なカラム数は最大で505(SK列)までで収まります。
※内容がわかりにくいようでしたらコメントにご質問ください。

どうぞよろしくお願い致します。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2012/03/04 15:52:26
  • 終了:2012/03/11 15:55:15

回答(1件)

id:takashi_m17 No.1

たか回答回数104ベストアンサー獲得回数122012/03/04 17:13:08

ポイント200pt
Sub test()
    y = 6                                   'セットするセル
    i = 2                                   '検索する行
    Do Until Cells(i, 1) = ""               '空白行になるまで繰り返し
    
                                            'i行とその上の行のキーセルが同じならば
        If Cells(i, 1) = Cells(i - 1, 1) And Cells(i, 2) = Cells(i - 1, 2) And Cells(i, 3) = Cells(i - 1, 3) And Cells(i, 4) = Cells(i - 1, 4) Then
            Cells(i - 1, y) = Cells(i, 5)   'セットセルにE列の値をセット
            Range(i & ":" & i).Delete       '検索し終えた行を削除
            y = y + 1                       'セットセルを1列右にずらす
                
        Else                                'もし検索行がひとつ上のキーと違うならば
            i = i + 1                       '検索行を1行下にずらす
            y = 6                           'セット列を初期に戻す
        End If
    Loop
End Sub

いちおう、A,B,C,D列がすでにソートされているのが前提です。
別シートに結果を出しても良かったのですが、とりあえず元データを加工する形になっています。
(行削除されていきます)

他1件のコメントを見る
id:miku1973

少しファイルサイズを落としてみて再チャレンジしてみますね!

2012/03/04 18:50:51
id:takashi_m17

画面の描画を止めて処理すると多少は変わるかもしれません。
Sub test()の下に
Application.ScreenUpdating = False

あとEnd Subの上に
Application.ScreenUpdating = True

を入れてみてください。

2012/03/04 20:40:24
  • id:taknt
    しょうがないから 全列を連結して 一行にし、それをソートキーにし ソートさせたらいい。

    ま、それで うまくいかなかったら しょうがないけどね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません