人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

1330843944
●拡大する

●質問者: yoshifuku
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● たか
●200ポイント
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列がすでにソートされているのが前提です。
別シートに結果を出しても良かったのですが、とりあえず元データを加工する形になっています。
(行削除されていきます)


yoshifukuさんのコメント
ありがとうです。 2万行くらいまで上手くいきましたが、リソース不足に…。 これは困った。 あえて削除をしないで最後に並べ換えて空白行を詰めてしまうのもありかな?リソース不足は解消されないかもしれないけど。 引き続き回答をお待ちします。

yoshifukuさんのコメント
少しファイルサイズを落としてみて再チャレンジしてみますね!

たかさんのコメント
画面の描画を止めて処理すると多少は変わるかもしれません。 Sub test()の下に Application.ScreenUpdating = False あとEnd Subの上に Application.ScreenUpdating = True を入れてみてください。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ