みなさんはRemoveDuplicatesを使っていますか?
RemoveDuplicatesメソッドを使えば、簡単に表の中から重複している行を削除することができます。
その一方で「うまくいかない」「エラーが出る」などの声もあります。
今回は RemoveDuplicates メソッドで「削除されない」「エラーが出る」ことの対処方法について徹底的に説明していきます。
参考:Excel VBA入門 その56:RemoveDuplicatesで重複セルとすべての空白セルを削除する方法
RemoveDuplicatesで削除されない・エラー対処方法
RemoveDuplicatesメソッドを使用した場合、以下のようなエラーが考えられます。
- 「実行時エラー1004、アプリケーション定義またはオブジェクト定義のエラーです。」が表示されてしまう
- 重複を調べる基準の列を指定しても、その列を基準にしてうまく削除されない
これらのエラーについて解説していきます。
「実行時エラー1004、アプリケーション定義またはオブジェクト定義のエラーです。」が表示されてしまう
今回説明のために使う表は以下のものになります。
この表では、C列の「バナナ」と「玉ねぎ」がそれぞれ3行ずつあり、重複しています。
さっそくエラー1004が表示される間違ったコードを以下に示します。
Sub エラー1004が出る重複データの削除サンプル()
Range(Cells(1, 3), Cells(11, 3)).RemoveDuplicates Columns:=2, _
Header:=xlYes
End Sub
このコードは、表をセル「C1~C11」まで選択し、その中で重複する行を削除するコードです。
実行するとエラー1004が表示されます。
エラーが出る理由は、2行目で
Range(Cells(1, 3), Cells(11, 3)).RemoveDuplicates Columns:=3, _
Header:=xlYes
のように、「Columns:=3」としているからです。
ここで言う「Columns:=3」が意味しているのは、「指定した表の3列目」ということです。
今回のコードでは、 Range(Cells(1, 3), Cells(11, 3)) として、指定しているのは「C1~C11」までの表ということになります。
C1~C11の表ということは、1列の表ということになりますので、「Columns:=3」が意味する「指定した表の3列目」 というものは存在しないため、エラーになってしまいます。
では、Columns:=1として実行してみると、下の表のようにC列の項目だけ削除されてしまいます。
きちんと動作する正解のコードを示します。
Sub 重複データの削除()
Range("B2").CurrentRegion.RemoveDuplicates Columns:=2, _
Header:=xlYes
End Sub
このように、表の範囲を「CurrentRegion」で使われているセル全体を指定し、「Columns:=2」で指定した表の中の2列目(B列)を重複を調べる基準の列に指定することで、重複している行を削除することができます。
ちなみに、実行結果は以下のようになります。
重複を調べる基準の列を指定しても、その列を基準にしてうまく削除されない
これも、「表の範囲指定」または「重複を調べる基準の列の指定」が間違っている可能性があると考えられます。
よくある間違いのコードとその実行結果を示します。
Sub うまく削除されない重複データの削除サンプル()
Range(Cells(1, 3), Cells(11, 3)).RemoveDuplicates Columns:=1, _
Header:=xlYes
End Sub
実行するとこのように歯抜けの表になってしまいます。
原因は、Range(Cells(1, 3), Cells(11, 3))としてしまい、表の一部分(1列)しか指定していないことにあります。
表の一部分を指定するのではなく、表全体を指定する必要があります。
重複行を削除する範囲は、指定された表の範囲になるからです。
今回の例での正解は、 Range(Cells(1, 3), Cells(11, 3)) を、Range(“B2”).CurrentRegionとして、使用されているセル全体を指定することとなります。
ちなみに、上記コードでは、「Columns:=1」としていますが、これは表の1列目ということを意味しており、決してA列を意味するものではないので注意してください。
正解のコードと実行結果を示します。
Sub 重複データの削除()
Range("B2").CurrentRegion.RemoveDuplicates Columns:=2, _
Header:=xlYes
End Sub
【まとめ】RemoveDuplicatesで削除されない・エラー対処方法
今回は、 RemoveDuplicates メソッドを使用しても削除されない、エラー1004が表示されるということについて解説しました。
RemoveDuplicates メソッド がうまくいかない原因は、「表の範囲指定」または「重複を調べる基準の列の指定」が間違っている可能性があると考えられます。
基本的には、表は使われているセル全体を CurrentRegionで指定すること、Columns:=□で指定する列は表の範囲内の□列目に該当する列を意味すること、が対処方法のポイントになります。
RemoveDuplicates メソッド は頻繁に使うので、ぜひ覚えておいてくださいね。
参考:Excel VBA入門 その45:Sortのエラー原因・対処法 (Apply Error’1004’など)
コメント
[…] 参考:Excel VBA入門 その55:RemoveDuplicatesで削除されない・エラー対処方法 […]
[…] 参考:Excel VBA入門 その55:RemoveDuplicatesで削除されない・エラー対処方法 […]