excel_重複する値のセルの消去_04_行が空白なら行を削除


Sub RemoveDuplicates()


    Dim rng As Range

    Dim cell As Range

    Dim dict As Object

    Dim key As Variant

   

    '選択範囲を取得

    Set rng = Selection



    '辞書オブジェクトを作成

    Set dict = CreateObject("Scripting.Dictionary")


    '各セルをチェックして、重複している値を削除


    For Each cell In rng


        If Not dict.exists(cell.Value) Then

            dict.Add cell.Value, 1

        Else


            cell.ClearContents


        End If


    Next cell


    'メモリ解放

    Set dict = Nothing

End Sub


上記のコードを実行するときに、


For文内の対象のセルが含まれている行のほかの列に

値が記入されていないときには、


その行を削除する、というように処理を変更したコードを

教えていただけないでしょうか?



もちろんです! 

For文内の対象のセルが含まれている行の他の列に

値が記入されていない場合、

その行を削除するように処理を変更するには、


以下のようなコードに変更すると良いでしょう。


```vba


Sub RemoveDuplicates()


    Dim rng As Range

    Dim cell As Range

    Dim dict As Object

    Dim key As Variant

    Dim ws As Worksheet

    Dim rowIndex As Long

   

    ' 選択範囲を取得

    Set rng = Selection


    ' 辞書オブジェクトを作成

    Set dict = CreateObject("Scripting.Dictionary")

    

    ' 対象のシートを取得

    Set ws = rng.Worksheet

    

    ' 各セルをチェックして、重複している値を削除

    For Each cell In rng

        If Not dict.exists(cell.Value) Then

            dict.Add cell.Value, 1

        Else

            cell.ClearContents

        End If

    Next cell

    

    ' 対象の行を逆順でチェックし、空白行を削除

    For rowIndex = rng.Rows.Count To 1 Step -1

        If Application.WorksheetFunction.CountA(

ws.Rows(rng.Cells(rowIndex, 1).Row)) = 0 Then


            ws.Rows(rng.Cells(rowIndex, 1).Row).Delete


        End If


    Next rowIndex

    

    ' メモリ解放

    Set dict = Nothing


End Sub



```


このコードでは、

重複値を削除した後、対象の範囲内の行を逆順でチェックし、

行全体が空白の場合にその行を削除します。


このようにすることで、

元の範囲内に空白の行が含まれないように

することができます。


お試しください!



コメント