• ベストアンサー

エクセルでセルの比較&整理をしたい

エクセルで複数の列にデータが羅列されていたとします。 T1,A5,D5 A5,C3,A1 T6,B2,C3 A1,A6,D4 B2,T1,T5 これを、各列ごとのソートと同時に各行ごとに整理って出来ますか? ↓このように!! A1, ,A1 A5,A5,  ,A6, B2,B2 ,C3,C3 , ,D4 , ,D5 T1,T1, T5, ,T5 マクロで一発解決とやり始めてみるとソートをした段階でパニック症候群に陥ってしまいました。 どなたか?詳しい方がいらっしゃいましたら、ヒントだけでも教えて頂けないでしょうか?宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.4

エラー処理とかしてませんので、一応サンプルということで...(^_^;) Sub TEST() ' A列コピー   A_endLine = Range("A1").End(xlDown).Row   Range("A1:A" & A_endLine).Copy   Range("D1").Select   ActiveSheet.Paste ' B列コピー   B_endLine = Range("B1").End(xlDown).Row   D_endLine = Range("D1").End(xlDown).Row + 1   Range("B1:B" & B_endLine).Copy   Range("D" & D_endLine).Select   ActiveSheet.Paste ' C列コピー   C_endLine = Range("C1").End(xlDown).Row   D_endLine = Range("D1").End(xlDown).Row + 1   Range("C1:C" & C_endLine).Copy   Range("D" & D_endLine).Select   ActiveSheet.Paste ' D列のソート   D_endLine = Range("D1").End(xlDown).Row   Range("D1:D" & D_endLine).Select   Selection.Sort Key1:=Range("D1") ' D列重複データー削除   d = 4: l = 2   x = Cells(1, d)   Do While Cells(l, d) <> ""    If x = Cells(l, d) Then     Cells(l, d).Select     Selection.Delete Shift:=xlUp    Else     x = Cells(l, d)     l = l + 1    End If   Loop ' A~Cのデーター貼り付け   For di = 1 To D_endLine    For ai = 1 To A_endLine     If Cells(di, d) = Cells(ai, 1) Then      Cells(di, 5) = Cells(ai, 1)     End If    Next    For bi = 1 To B_endLine     If Cells(di, d) = Cells(bi, 2) Then      Cells(di, 6) = Cells(bi, 2)     End If    Next    For ci = 1 To C_endLine     If Cells(di, d) = Cells(ci, 3) Then      Cells(di, 7) = Cells(ci, 3)     End If    Next   Next End Sub

その他の回答 (4)

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.5

あ、各列毎のソートは、予めやって置いてください (^_^;)

cbr4001964
質問者

お礼

丁寧にサンプルまでつけて頂き有難う御座います。 早速試してみたところ上手く行きました。 有難うございます。今後とも宜しくお願いいたします。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.3

>どの列が何が欠落しているのか?が知りたいので なるほど、了解です まず、全てのデーターのパターンを調べる必要が有りますので、No1の方法でパターン表を作ります それから、改めて、各列ごとにパターン列に該当する処に貼り付けていくという手順になるかと思います データーは3列ということですので、作業列をD~Gまで使います 1.まず、各列ごとにソートしておきます 2.VBAで、D列にA,B,C列のデーターをコピーします 3.D列をソートします 4.VBAで、D列を上から順番に重複セルを削除していきます 5.VBAで、A~C列のデーターをD列と照合し、E~G列に貼り付けていきます と、こんな感じでしょうか

回答No.2

マクロがわかるという前提です。 まずはすべての項目を配列に入れ、それをソートして、書き出すというのはどうでしょうか?

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.1

1つずつ順番にやっていきましょう まず、複数列のデーターを、1列に並べ替えます、そこでソートします そうすると A1 A1 A5 A5 A6 となりますので、改めて、同じデーターを横に並べ替えます マクロ(VBA)でやる場合 1.列は何列あるのか(固定か、不確定なのか) 2.途中に空白行(セル)は有るのか 3.行の最後は列によって違うのか と言った要素によって、やり方が変ります

cbr4001964
質問者

お礼

追伸 ","がセルの区切りを表しているつもりでした。 説明が不足しており、済みませんでした。

cbr4001964
質問者

補足

補足させて頂きます。 各列の行数はばらばらです。途中に空白セルが存在します。(これは、例題で表したつもりでしたが、説明が悪くてすみませんでした) 列は、今のところ3列を予定しています。 教えて頂いた方法に重複するセルの削除を行えばトータルはでますが、どの列が何が欠落しているのか?が知りたいので、少し私の目的とはずれてしまいます。(教えて頂いた方法だと、A1を横に並べると1列目と2列目にA1が記載されてしまい、実際には、2列目にはA1は存在しません) 行数が、1000程度やるので、VBAでの方法を教えて頂ければ助かります。宜しくお願いいたします。