例文を使って繰り返し業務を時短

【マクロ・VBA】縦(行)ループして、重複データがあった場合、カラー表示する

エクセル、マクロ、VBAでシート内で重複したセルをカラー表示する VBA

重複セル/カラー表示

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

解説

  1. 最後の行から最初の行まで、セルAの値を確認します。
  2. 「CountIf」関数を使って、現在の行のA列の値が、A列全体で何回出現するかを確認します。
    • WorksheetFunction.CountIf(Range(“A:A”), Cells(i, 1)) > 1
      • ⇒A列に同じセルが1つ以上あったら、その値が1より大きければ、つまり重複している場合は…
  3. ThisWorkbook.ActiveSheet.Cells(i, 1).Interior.Color = RGB(204, 255, 255)
    • セルの背景色を薄青色に変更します。
  4. 最後に、「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

解説

  1. 変数maxRowを定義し、最大行数を取得する
  2. ループ変数i、jを定義し、各行を比較する
  3. もしi行とj行の1列目のセルが同じであれば、i行の背景色を変更する
  4. 次のiのループに進む前に、jのループを抜ける
  5. フィルターで、背景色が変更された行のみを表示する
  6. 最後に、完了メッセージを表示します。

補足

このマクロの問題点は、2つのforループを使用しているため、処理時間が長くなる可能性があることです。もしデータが多い場合、他の効率的なアプローチを検討する必要があります。また、データの量によっては、マクロが動作しなくなる場合があります。

例えば、Excelの「条件付き書式」を使用して、背景色を変更し、自動フィルターで表示することができます。これは、forループよりも効率的であるため、マクロの速度が向上する可能性があります。また、VBAコードを使用せずに、Excelの組み込みの「重複の削除」機能を使用することもできます。

コメント

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