VBA|RemoveDuplicatesで重複セルとすべての空白セルを削除する方法

エクセルVBA VBAでセルの操作



RemoveDuplicatesメソッドは、表の中から重複する行を削除することができる便利メソッドです。

ここで、よく質問があるのが「重複したセルを削除し、さらに空白のセルをすべて削除したい」ということです。

これは、

今回は、 RemoveDuplicatesメソッド を使用して「重複セルとすべての空白セルを削除する」サンプルコードを紹介します。



RemoveDuplicatesで重複セルとすべての空白セルを削除する方法

すべての空白セルを削除するとは?

RemoveDuplicatesメソッドを使った場合に「すべての空白セルを削除する」ということは何を意味しているのでしょうか。

RemoveDuplicatesメソッド は重複したセルを削除することができるメソッドです。

これは空白セルにも有効で、空白セルも重複したセルとみなすことができます。

つまり、空白セルが2行以上存在すれば、空白セル同士を重複セルとしてカウントされるのです。

百聞は一見にしかずです。

下の表を見てください。空白セルが含まれる行が2か所あります。

これを 以下のサンプルコードのようにRemoveDuplicatesメソッド を使って空白セルを削除してみます。なお、サンプルコードでは、表のC列「名称」を基準に重複セルを削除しています。

Sub 空白セルを削除()
  Range("B2").CurrentRegion.RemoveDuplicates Columns:=2, Header:=xlNo
End Sub

実行結果:

このように、2行ある空白セルが重複したセルとカウントされますが、2行ある空白セルのうち1行の空白セルが削除されずに残ってしまいます。

達成したい目的は、空白セルをすべて削除することですので、これでは目的を達成できていません。

このように、RemoveDuplicatesメソッド を使った方法では、すべての空白セルを削除することができないのです。

重複セルとすべての空白セルを削除するサンプルコード

それでは、すべての空白セルを削除するサンプルコードを以下に示します。

Sub すべての空白セル及び重複セルを削除()
  With Range("B2").CurrentRegion
    .SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp
    .RemoveDuplicates Columns:=2, Header:=xlNo
  End With
End Sub

実行結果:

このように

.SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp

を加えることで、空白セル行を削除した後に、RemoveDuplicatesメソッドで重複セルを削除するという動作をします。

これにより、空白セル行をすべて削除することができるのです。

【まとめ】RemoveDuplicatesで重複セルとすべての空白セルを削除する方法

以上のように、RemoveDuplicatesメソッドを使って空白セルを削除すると、どうしても1行削除されずに残ってしまいますので、

.SpecialCells(xlCellTypeBlanks).EntireRow.Delete shift:=xlShiftUp

を加えることで、空白セル行をすべて削除した後に、 RemoveDuplicatesメソッドを使って重複セルを削除することができるようになります。

RemoveDuplicatesメソッド と空白セル行すべて削除することは併用されることが多いですので、ぜひ役立ててくださいね☆

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

 




VBAでセルの操作
ブイサバ【Excel VBAサバイバル】~とりあえずここに来れば解決できる~

コメント

  1. […] 参考:Excel VBA入門 その56:RemoveDuplicatesで重複セルとすべての空白セルを削除する… […]

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