- ベストアンサー
エクセルでセルの比較&整理をしたい
エクセルで複数の列にデータが羅列されていたとします。 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 マクロで一発解決とやり始めてみるとソートをした段階でパニック症候群に陥ってしまいました。 どなたか?詳しい方がいらっしゃいましたら、ヒントだけでも教えて頂けないでしょうか?宜しくお願いいたします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
エラー処理とかしてませんので、一応サンプルということで...(^_^;) 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)
あ、各列毎のソートは、予めやって置いてください (^_^;)
- ASIMOV
- ベストアンサー率41% (982/2351)
>どの列が何が欠落しているのか?が知りたいので なるほど、了解です まず、全てのデーターのパターンを調べる必要が有りますので、No1の方法でパターン表を作ります それから、改めて、各列ごとにパターン列に該当する処に貼り付けていくという手順になるかと思います データーは3列ということですので、作業列をD~Gまで使います 1.まず、各列ごとにソートしておきます 2.VBAで、D列にA,B,C列のデーターをコピーします 3.D列をソートします 4.VBAで、D列を上から順番に重複セルを削除していきます 5.VBAで、A~C列のデーターをD列と照合し、E~G列に貼り付けていきます と、こんな感じでしょうか
- CaveatEmptor
- ベストアンサー率26% (126/470)
マクロがわかるという前提です。 まずはすべての項目を配列に入れ、それをソートして、書き出すというのはどうでしょうか?
- ASIMOV
- ベストアンサー率41% (982/2351)
1つずつ順番にやっていきましょう まず、複数列のデーターを、1列に並べ替えます、そこでソートします そうすると A1 A1 A5 A5 A6 となりますので、改めて、同じデーターを横に並べ替えます マクロ(VBA)でやる場合 1.列は何列あるのか(固定か、不確定なのか) 2.途中に空白行(セル)は有るのか 3.行の最後は列によって違うのか と言った要素によって、やり方が変ります
お礼
追伸 ","がセルの区切りを表しているつもりでした。 説明が不足しており、済みませんでした。
補足
補足させて頂きます。 各列の行数はばらばらです。途中に空白セルが存在します。(これは、例題で表したつもりでしたが、説明が悪くてすみませんでした) 列は、今のところ3列を予定しています。 教えて頂いた方法に重複するセルの削除を行えばトータルはでますが、どの列が何が欠落しているのか?が知りたいので、少し私の目的とはずれてしまいます。(教えて頂いた方法だと、A1を横に並べると1列目と2列目にA1が記載されてしまい、実際には、2列目にはA1は存在しません) 行数が、1000程度やるので、VBAでの方法を教えて頂ければ助かります。宜しくお願いいたします。
お礼
丁寧にサンプルまでつけて頂き有難う御座います。 早速試してみたところ上手く行きました。 有難うございます。今後とも宜しくお願いいたします。