dポイントプレゼントキャンペーン実施中!

重複行を削除するマクロを作っていますが、うまくいきません。
2行目にタイトルが入っていて、3行目以降が必要なデータになります。
この中でA列が一致しているデータ行を削除したいと考えており、
重複データが削除された後、タイトル行がなぜか一番下の行にはりついてしまいます。
どなたか詳しい方助けてください!!!よろしくお願いします。

ちなみに以下が現在使用しているVBAコードです。

===============================================================

Sub GoodRemoveDuplicates()
'A列にデータが入力されており、そのデータを並べ替えた後、
'重複するデータが含まれている行を削除するマクロ
Worksheets("貼り付け用用マクロ").Range("A1").Sort _
key1:=Worksheets("貼り付け用用マクロ").Range("A1")
Set currentCell = Worksheets("貼り付け用用マクロ").Range("A1")
Do While Not IsEmpty(currentCell)
Set nextCell = currentCell.Offset(1, 0)
If nextCell.Value = currentCell.Value Then
currentCell.EntireRow.Delete
End If
Set currentCell = nextCell
Loop
End Sub

===============================================================

「重複行削除のマクロ」の質問画像

A 回答 (3件)

#2です。


重複削除が出来ないそうですが、その部分はWarabi-0212さんが作成されたもので、
Set currentCell = Worksheets("貼り付け用用マクロ").Range("A1")を
Set currentCell = ws.Range("A3")に変更しただけです。

削除できない理由として考えられるのは、currentCell がA1のままかつ、A1又はA2が空白であればDo~Loopを抜けてしまうので、行削除がされない可能性はあります。

私はcurrentCellをA3から開始するように変更していますが、A1のままという事はありませんか?
コードを全てコピペすれば動くはずのですが。

下記方法でも可能だと思います。

Sub Sample02()
Dim i, Maxrow As Long
Dim ws As Worksheet

'ワークシート名を変数wsに格納
Set ws = Worksheets("sheet1")

'A列の最終行取得
Maxrow = ws.Cells(Rows.Count, "A").End(xlUp).Row

'セルA3以下を降順ソート
ws.Range(Cells(3, "A"), Cells(Maxrow, "A")) _
.Sort key1:=ws.Range("A3"), order1:=xlAscending

'A3以降の重複行を削除
With ws.Range("A3")
For i = .CurrentRegion.Rows.Count To 1 Step -1
If .Offset(i, 0) = .Offset(i - 1, 0) Then .Offset(i, 0).EntireRow.Delete
Next i
End With

End Sub
    • good
    • 0
この回答へのお礼

うまくできました。
本当にありがとうございました!!!!
助かりました。

お礼日時:2013/12/14 17:10

VBAの一例です。

ご参考まで。
A列をA3以下で降順ソートしたいようですが、A列全体でソートしているようです。
A列の最終行を取得し、ソート範囲を指定するVBAとしてみました。
ワークシート名が頻繁に出てくるので変数wsに格納するように変更しました。


Sub GoodRemoveDuplicates()
'A列にデータが入力されており、そのデータを並べ替えた後、
'重複するデータが含まれている行を削除するマクロ
Dim i, Maxrow As Long
Dim currentCell, nextCell As Range
Dim ws As Worksheet

'ワークシート名を変数wsに格納
Set ws = Worksheets("貼り付け用用マクロ")

'A列の最終行取得
Maxrow = ws.Cells(Rows.Count, "A").End(xlUp).Row

'セルA3以下を降順ソート
ws.Range(Cells(3, "A"), Cells(Maxrow, "A")) _
.Sort key1:=ws.Range("A3"), order1:=xlAscending

'セルA3以下の重複行を削除
Set currentCell = ws.Range("A3")
Do While Not IsEmpty(currentCell)
Set nextCell = currentCell.Offset(1, 0)
If nextCell.Value = currentCell.Value Then
currentCell.EntireRow.Delete
End If
Set currentCell = nextCell
Loop

End Sub

この回答への補足

ご教授いただき、ありがとうございます。
早速試してみましたが、うまくいきません。
重複削除もされず、A列の順番だけが変わっている状態です。

タイトルの受付番号が一番下の行に移動し、ソートされています。

やりたいことはA列の数字の重複を見て、重複している行を削除したいです。
申し訳ないですが、再度ご教授いただけますでしょうか。

よろしくお願いします。

補足日時:2013/12/13 12:14
    • good
    • 0

Range("A1").Sort


とすれば当然、A列全体がソートされますから、その時点でタイトル行が下に行ってるのでしょうね。
範囲指定してからソートしないと。

参考URL:http://long-distance.jp/sb/log/eid235.html
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!