Excel VBA入門 その55:RemoveDuplicatesで削除されない・エラー対処方法

エクセルVBA VBA



みなさんは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’など)

コメント

  1. […] 参考:Excel VBA入門 その55:RemoveDuplicatesで削除されない・エラー対処方法 […]

  2. […] 参考:Excel VBA入門 その55:RemoveDuplicatesで削除されない・エラー対処方法 […]

タイトルとURLをコピーしました