プロが教えるわが家の防犯対策術!

重複を取り出す。

シート1に画像左のような3項目のデータがあります。
項目1・2・3の値を合わせて見て重複しているものだけを別シート(画像右)に書き出したいです。

考えたのは3列を合体させて別の列に書き出し、重複している値にフラグを立てる。
フラグが立たなかったものを削除し、残った重複データを削除する。
最後に合体させた値を項目1・2・3と分解をする。
これだと作業列がどうしてもできてしまいます。
できれば作業用の列を追加したくないです。

マクロコードを教えてください。
お願いします。

「エクセルのマクロ教えてください。」の質問画像

質問者からの補足コメント

  • 行数は可変します。

      補足日時:2020/02/11 18:26

A 回答 (5件)

このコード、読めますか?


項目見出し、および、重複のある行のうちの2行目をコピーして、Sheet2へペーストしてみました。
「重複のある行のうちの2行目」を判定するために、Countifs関数を使って、答えが2となる行を対象としました。なので、効率が良いとは言えません。見た感じ、データはソートされているようなので、前後の比較で判断したほうが効率的かもしれません。

Sub sample()
Dim myRng As Range
Dim i As Long
With Sheets("Sheet1")
Set myRng = .Range("A1:C1")
For i = 2 To .Cells(Rows.Count, "A").End(xlUp).Row
If WorksheetFunction.CountIfs(.Range(.Cells(2, "A"), .Cells(i, "A")), .Cells(i, "A"), _
.Range(.Cells(2, "B"), .Cells(i, "B")), .Cells(i, "B"), _
.Range(.Cells(2, "C"), .Cells(i, "C")), .Cells(i, "C")) = 2 Then
Set myRng = Union(myRng, .Cells(i, "A").Resize(, 3))
End If
Next i
End With
myRng.Copy Worksheets("Sheet2").Range("A1")
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
思い通りになりました。
コードはひとつずつ調べます。

お礼日時:2020/02/11 18:29

訂正します、すみません。


違う行に出力しているので、、Copyしています。本来同じ行で実行します。
行× 列〇 範囲〇
違う列に出力しているので、、Copyしています。本来同じ範囲で実行します。

応用、変更する場合は、RemoveDuplicatesで調べてください。
    • good
    • 0

こんにちは、シート構成が分かりませんが、


ただ、重複をなくすだけなら、RemoveDuplicatesを使えば、一行です。
ご質問の場合、2行コードで、、列の行をすべてこの為に使っているなら、これでOK
使えないなら、Dictionaryオブジェクトかな。。これだと少し理解するのが難しいかも。。です。
RemoveDuplicatesの例
違う行に出力しているので、、Copyしています。本来同じ行で実行します。
Sub duplicateDelete() '重複データの削除
 ActiveSheet.Range("A:C").Copy ActiveSheet.Range("D:F")
 ActiveSheet.Range("D:F").RemoveDuplicates Columns:=Array(1, 2, 3)
End Sub
A列からデータがある場合、あくまで、ご質問の内容です。 
参考まで。
    • good
    • 0
この回答へのお礼

ありがとうございます。
重複を消すのではなく、どれが重複しているか取り出したいです。

お礼日時:2020/02/11 18:28

正解は No1のGooUserラックさんがお答えされると思います。



でもVBAのコードをかけるスキルを取得されないとあとが大変ですよ。
こういうのは必ず修正がつきものです。
    • good
    • 0

行数は最大でどの位でしょうか?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!