Excel

【Excel】VBAマクロで同じ値があったら別シートに転記・削除(重複を)する方法【Find, Copy, Delete】

当サイトでは記事内に広告を含みます。

この記事では、VBAマクロで同じ値があったら別シートに転記・削除(重複を)する方法【Find, Copy, Delete】について解説していきます。

ポイントとしては`Find`、`Copy`、`Delete`メソッドを使用することです。

初心者でもわかりやすいように、少々変わった日本語のローマ字風表記の変数名を用いて説明します。

それでは詳しく見ていきましょう!

 

VBAマクロで同じ値があったら別シートに全て転記する方法

それではまず、B列の数値で重複しているデータを別シートに転記する方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub aaaaacopyRowsaaaaa()
    Dim aaaaaworksheetSourceaaaaa As Worksheet, aaaaaworksheetTargetaaaaa As Worksheet
    Dim aaaaalastRowaaaaa As Long, aaaaaiRowaaaaa As Long
    Dim aaaaadictionaryaaaaa As Object
    Set aaaaadictionaryaaaaa = CreateObject("Scripting.Dictionary")
    Set aaaaaworksheetSourceaaaaa = ThisWorkbook.Sheets("Source")
    Set aaaaaworksheetTargetaaaaa = ThisWorkbook.Sheets("Target")
    
    aaaaalastRowaaaaa = aaaaaworksheetSourceaaaaa.Cells(aaaaaworksheetSourceaaaaa.Rows.Count, "B").End(xlUp).Row
    
    For aaaaaiRowaaaaa = 1 To aaaaalastRowaaaaa
        If Not aaaaadictionaryaaaaa.Exists(aaaaaworksheetSourceaaaaa.Cells(aaaaaiRowaaaaa, 2).Value) Then
            aaaaadictionaryaaaaa.Add aaaaaworksheetSourceaaaaa.Cells(aaaaaiRowaaaaa, 2).Value, Nothing
        Else
            aaaaaworksheetSourceaaaaa.Rows(aaaaaiRowaaaaa).Copy Destination:=aaaaaworksheetTargetaaaaa.Rows(aaaaaworksheetTargetaaaaa.Cells(aaaaaworksheetTargetaaaaa.Rows.Count, "B").End(xlUp).Row + 1)
        End If
    Next aaaaaiRowaaaaa
End Sub

コードのAlt+F8を押し、マクロ選択画面で`copyRows`関数を実行します。

このコードは、SourceシートのB列を確認し、重複している行をTargetシートに転記します。`Dictionary`オブジェクトを使用して、重複チェックを行い、転記を行います。

 

VBAマクロで同じ値があったら削除し先頭行だけ重複を残す方法

続いては、B列の数値で重複している行を削除し、最初の行のみ残す方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub aaaaadeleteDuplicatesaaaaa()
    Dim aaaaaworksheetaaaaa As Worksheet
    Dim aaaaalastRowaaaaa As Long, aaaaaiRowaaaaa As Long
    Dim aaaaadictionaryaaaaa As Object
    Set aaaaadictionaryaaaaa = CreateObject("Scripting.Dictionary")
    Set aaaaaworksheetaaaaa = ThisWorkbook.Sheets("Source")
    
    aaaaalastRowaaaaa = aaaaaworksheetaaaaa.Cells(aaaaaworksheetaaaaa.Rows.Count, "B").End(xlUp).Row
    
    For aaaaaiRowaaaaa = aaaaalastRowaaaaa To

 1 Step -1
        If Not aaaaadictionaryaaaaa.Exists(aaaaaworksheetaaaaa.Cells(aaaaaiRowaaaaa, 2).Value) Then
            aaaaadictionaryaaaaa.Add aaaaaworksheetaaaaa.Cells(aaaaaiRowaaaaa, 2).Value, Nothing
        Else
            aaaaaworksheetaaaaa.Rows(aaaaaiRowaaaaa).Delete
        End If
    Next aaaaaiRowaaaaa
End Sub

コードのAlt+F8を押し、マクロ選択画面で`deleteDuplicates`関数を実行します。

このコードでは、B列で重複している行を削除し、最初に見つけた行のみを残します。

ループは最終行から開始し、重複が検出された場合、その行を削除します。

 

まとめ VBAマクロで同じ値があったら転記や重複削除(先頭を残す)する方法【Find, Copy, Delete】

この記事では、VBAマクロで同じ値があったら転記や重複削除(先頭を残す)する方法【Find, Copy, Delete】を確認しました。

マクロを上手に活用していきましょう。