- ベストアンサー
複数列の条件が合致する重複行を削るマクロ
1行目は項目が書いてあり、データ自体は2行目以降になります。 B列、D列、F列が重複するデータについては、一番上の行のひとつだけを残して残りの行を削除する方法です。 削除した空白行は作らないようにします。 その際、最終的に、B列を基準にソートになるように並び変えます。 ひとつだけの列が該当する場合の削除はわかるのですが、この場合、どのように記述したらいいのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
No.2です。 >作業用シートを作りたくないので、出来れば同一シート内で作業したいのですが・・・ とありますので、元データそのものを変更します。 シートモジュールにしていますので、Sheet1のVBE画面にコードをコピー&ペーストしてマクロを実行してみてください。 Sub Sample1() Dim i As Long, k As Long Application.ScreenUpdating = False Range("A:B").Insert i = Cells(Rows.Count, 3).End(xlUp).Row Range(Cells(2, 1), Cells(i, 1)).Formula = "=D2&""_""&F2&""_""&H2" Range(Cells(2, 2), Cells(i, 2)).Formula = "=IF(COUNTIF(A$2:A2,A2)=1,1,"""")" For k = i To 2 Step -1 If Cells(k, 2) = "" Then Rows(k).Delete End If Next k Range("A:B").Delete Cells(1, 1).CurrentRegion.Sort key1:=Cells(1, 2), Order1:=xlAscending, Header:=xlYes Application.ScreenUpdating = True End Sub こんなんではどうでしょうか?m(_ _)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 一例です。 Sheet1のデータをSheet2に表示するようにしてみました。 ↓のコードを標準モジュールにコピー&ペーストしてマクロを実行してみてください。 尚、A列で最終行の取得、データの範囲指定を行っていますので、 A列には必ずデータが入っている!という前提です。 Sub Sample1() Dim i As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") Set wS2 = Worksheets("Sheet2") Application.ScreenUpdating = False wS2.Cells.ClearContents wS1.Range("A:B").Insert i = wS1.Cells(Rows.Count, 3).End(xlUp).Row Range(wS1.Cells(2, 1), wS1.Cells(i, 1)).Formula = "=D2&""_""&F2&""_""&H2" Range(wS1.Cells(2, 2), wS1.Cells(i, 2)).Formula = "=IF(COUNTIF(A$2:A2,A2)=1,1,"""")" wS1.Cells(1, 1).CurrentRegion.AutoFilter , field:=2, Criteria1:=1 wS1.Range("C:H").Copy wS2.Cells(1, 1) wS2.Cells(1, 1).CurrentRegion.Sort key1:=wS2.Cells(1, 2), order1:=xlAscending, Header:=xlYes wS1.Range("A:B").Delete wS1.AutoFilterMode = False Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m
補足
ありがとうございます。 作業用シートを作りたくないので、出来れば同一シート内で作業したいのですが、可能でしょうか? Sheets("Sheet2").Select Cells.Select Selection.Copy Sheets("Sheet1").Select Cells.Select ActiveSheet.Paste と最後に加えることでシート1に結果を出力できるのですが、 たとえば、シート2に結果を出すのでなく、シート1のG列以降のスペースを使って結果出力し、それをA列にコピー、G列以降の元データを削除 こんな感じはどうすればいいでしょうか
- keithin
- ベストアンサー率66% (5278/7941)
一列追加して =B列&","&D列&","&F列 を計算する数式をマクロで並べ、それを使って >ひとつだけの列が該当する場合の削除はわかる のマクロに引き継ぐのが、たぶん一番あなたにとって手っ取り早い方法です。 #そもそも何のソフトのご相談なのかも書かれてませんが、普段あなたが使うソフトのバージョンもしっかりご相談に書いてください。それによっては、もっと簡単な方法が使える場合もあります。今回はこれ以上フォローはしませんが、次のご相談からは覚えておいてください。
お礼
ありがとうございます ばっちりでした!