重複セル/カラー表示
Excelシート内の列Aにある重複データを探し、ハイライト表示するものです。
Sub 縦列重複チェック()
Dim i As Long
For i = ThisWorkbook.ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
If WorksheetFunction.CountIf(Range("A:A"), Cells(i, 1)) > 1 Then
ThisWorkbook.ActiveSheet.Cells(i, 1).Interior.Color = RGB(204, 255, 255)
End If
Next i
MsgBox "完了"
End Sub
解説
- 最後の行から最初の行まで、セルAの値を確認します。
- 「CountIf」関数を使って、現在の行のA列の値が、A列全体で何回出現するかを確認します。
- WorksheetFunction.CountIf(Range(“A:A”), Cells(i, 1)) > 1
- ⇒A列に同じセルが1つ以上あったら、その値が1より大きければ、つまり重複している場合は…
- WorksheetFunction.CountIf(Range(“A:A”), Cells(i, 1)) > 1
- ThisWorkbook.ActiveSheet.Cells(i, 1).Interior.Color = RGB(204, 255, 255)
- セルの背景色を薄青色に変更します。
- 最後に、「MsgBox」を使って、「完了」というメッセージを表示します。
参考
- ThisWorkbook.ActiveSheet.Cells(i, 1).Font.ColorIndex = 3
⇒フォントカラーを赤にする - ThisWorkbook.ActiveSheet.EntireRow.Delete
⇒列を削除する
重複セル/カラー表示
このコードは、Excelシート上で重複した行を検出して、その行の背景色を変更し、フィルタリングして表示するためのマクロです。
*ループを二重にして一行目のデータがその下にあるか確認
Sub 重複行をカラー表示()
Dim maxRow As Long
maxRow = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Long, j As Long
For i = 1 To maxRow
For j = i + 1 To maxRow
If Cells(i, 1) = Cells(j, 1) Then
Rows(i).Interior.Color = RGB(204, 255, 255)
Exit For
End If
Next j
Next i
'背景色で抽出
ActiveSheet.Cells.AutoFilter Field:=1, Criteria1:=RGB(204, 255, 255), Operator:=xlFilterCellColor
MsgBox "完了"
End Sub
解説
- 変数maxRowを定義し、最大行数を取得する
- ループ変数i、jを定義し、各行を比較する
- もしi行とj行の1列目のセルが同じであれば、i行の背景色を変更する
- 次のiのループに進む前に、jのループを抜ける
- フィルターで、背景色が変更された行のみを表示する
- 最後に、完了メッセージを表示します。
補足
このマクロの問題点は、2つのforループを使用しているため、処理時間が長くなる可能性があることです。もしデータが多い場合、他の効率的なアプローチを検討する必要があります。また、データの量によっては、マクロが動作しなくなる場合があります。
例えば、Excelの「条件付き書式」を使用して、背景色を変更し、自動フィルターで表示することができます。これは、forループよりも効率的であるため、マクロの速度が向上する可能性があります。また、VBAコードを使用せずに、Excelの組み込みの「重複の削除」機能を使用することもできます。
コメント