- ベストアンサー
エクセルまたはVBAで重複行を削除
- エクセルまたはVBAを使用して、重複行を削除する方法について説明します。
- 重複行を削除するためには、まずエクセルでデータを準備する必要があります。
- VBAを使用してイベントを作成し、重複した行を検索して削除することができます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
参考URLで第8章の142項目を参考にしてください。
その他の回答 (4)
- ka_na_de
- ベストアンサー率56% (162/286)
マクロにこだわらないのなら、エクセルのメニューから簡単にできます。 1)1行目を挿入しA1を「ID」、B1を「値」などの見出しをつける。 2)「データ」→「フィルタ」→「フィルターオプションの設定」 3)例えば、 「抽出先」で「指定した範囲」にチェック 「リスト範囲」を「$A:$B」 「抽出範囲」を「$C:$D」 「重複するレコードは無視する」にチェック 以上を設定し「OK」 4)CD列に抽出結果が出ますので、元データが要らないならAB列削除 重複するデータがAB列でCD・・列に異なるデータがぶら下がっていても 同様にできるはずです。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 >それ以前にエクセルで前準備などして まず、こんなアドバイスが出来ますね。 方針を立てるときに、高度なワザを出しても、記録マクロなどを使っても、結果が同じなら、記録マクロのほうが、意外と良い(速い)ことが多いです。 「重複行を削除」 といったら、Excelユーザーでは、AdvancedFilter(フィルターオプション)を考えます。 しかし、二列に渡っているから、そのままでは出来ません。 だったら、 = A1 & B1 でつなげてしまい、それを、AdvancedFilter で掛けてしまえば簡単だと思いませんか? ところが、一文字と一文字をつなげるならよいのですが、そうではないこともあるので、区切り文字を入れます。 = A1 &","& B1 とすれば良いですね。 ためしに、誰でも可能な記録マクロを取って、簡単に書き換えるだけで出来ます。 これでも、私は、いろんなマクロを試して見た結果です。 Sub EasyMacro() Dim LastCell As Range Set LastCell = Range("A65536").End(xlUp) 'A列で最後のセルを取ってしまいました。 '注:横にデータがあると誤動作しますので、削除しておきます。 Range("C1", LastCell.Offset(, 5)).ClearContents Range("C1", LastCell.Offset(, 2)).FormulaR1C1 = "=RC[-2]&"",""&RC[-1]" '式から値にする Range("C1", LastCell.Offset(, 2)).Value = Range("C1", LastCell.Offset(, 3)).Value 'アドバンスフィルタを使う Range("C1", LastCell.Offset(, 2)).AdvancedFilter _ Action:=xlFilterCopy, _ CopyToRange:=Range("D1"), _ Unique:=True '出来てしまったら、C列はいらない Range("C1", LastCell.Offset(, 2)).ClearContents '区切り位置を使う Set LastCell = Range("D65536").End(xlUp) Range("D1", LastCell).TextToColumns _ Destination:=Range("D1"), _ DataType:=xlDelimited, _ TextQualifier:=xlDoubleQuote, _ ConsecutiveDelimiter:=False, _ Tab:=False, _ Semicolon:=False, _ Comma:=True, _ Space:=False, _ Other:=False, _ FieldInfo:=Array(Array(1, 1), Array(2, 1)), _ TrailingMinusNumbers:=True End Sub なお、区切り位置の記録マクロは、場所をとりますが、あまりむやみに省略しないほうがよいです。見かけは、大したものに見えますが、本当に簡単に作れます。 たったひとつ LastCellというところがひとつの工夫です。
- ASIMOV
- ベストアンサー率41% (982/2351)
VBA の一例ということで... >A列をキーに、昇順 を、前提として -------------------------------- Sub TEST() gyou = 1: owari = Range("A1").End(xlDown).Row Do If Cells(gyou, 1) = Cells(gyou + 1, 1) Then Rows(gyou + 1).Select Selection.Delete Shift:=xlUp owari = Range("A1").End(xlDown).Row Else gyou = gyou + 1 End If Loop While gyou <= owari End Sub
- kigoshi
- ベストアンサー率46% (120/260)
A列の値が同じであれば、B列の値も昇順に並んでいるという条件ならば、 つまり 2 a 2 b 2 a という並びはあり得なく、必ず 2 a 2 a 2 b となっている場合ならば以下の手順でいかがでしょうか。 1)C1セルに =IF(A1&B1=A2&B2,"▲削除行","") を入れて下までコピー。 2)C列全体を選択し、[Ctrl]+[C]、[編集]→[形式を選択して貼り付け]→[値]にチェック→[OK] 3)C列をキーに降順で並べ替え 4)「▲削除行」の行を削除