エクセルまたはVBAで重複行を削除

このQ&Aのポイント
  • エクセルまたはVBAを使用して、重複行を削除する方法について説明します。
  • 重複行を削除するためには、まずエクセルでデータを準備する必要があります。
  • VBAを使用してイベントを作成し、重複した行を検索して削除することができます。
回答を見る
  • ベストアンサー

エクセルまたはVBAで重複行を削除

例えば、 A B 1 1 a 2 2 b 3 3 c 4 4 d 5 4 d 6 5 e 7 6 g 8 6 g といった表があるとします。 A列をキーに、昇順にされた一覧表です。 ここで番号が重複している行、この例では4行目と5行目、7行目と8行目がそうです。 こういった重複した行を検索して、行削除したいのですがどんな方法が可能でしょうか? 最終的にはVBAでのイベントになるでしょうが、それ以前にエクセルで前準備などしておくようなことは必要でしょうか? 表自体はかなり膨大な量のデータベースです。 よろしくお願いします。

  • ytj
  • お礼率44% (100/223)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

参考URLで第8章の142項目を参考にしてください。

参考URL:
http://www.voicechatjapan.com/excelvba/VBArei8.htm

その他の回答 (4)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.5

マクロにこだわらないのなら、エクセルのメニューから簡単にできます。 1)1行目を挿入しA1を「ID」、B1を「値」などの見出しをつける。 2)「データ」→「フィルタ」→「フィルターオプションの設定」 3)例えば、    「抽出先」で「指定した範囲」にチェック    「リスト範囲」を「$A:$B」    「抽出範囲」を「$C:$D」     「重複するレコードは無視する」にチェック    以上を設定し「OK」 4)CD列に抽出結果が出ますので、元データが要らないならAB列削除 重複するデータがAB列でCD・・列に異なるデータがぶら下がっていても 同様にできるはずです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >それ以前にエクセルで前準備などして まず、こんなアドバイスが出来ますね。 方針を立てるときに、高度なワザを出しても、記録マクロなどを使っても、結果が同じなら、記録マクロのほうが、意外と良い(速い)ことが多いです。 「重複行を削除」 といったら、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)
回答No.3

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)
回答No.2

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)「▲削除行」の行を削除

関連するQ&A

  • エクセル 重複行の編集 色をつける

    お世話になります。 エクセル2000にて以下のような表を作りました。    A |B |C 1 名称|1/11|123 2 ああ|1/11|456 ←行全体に色を付けたい 3 ああ|1/12|789 4 いい|1/11|999 ←行全体に色を付けたい 5 いい|1/11|888 ※行はA・B列をキーに、昇順(順序良く)並んでいます。 表の中に重複行(A・B列をキーとして)が存在していて、その一つ目の行に、色を付けたいのですが、 どうすれば実現できるでしょうか? 例でいうと、2・4行目に色を付けたいのですが、術が思いつきません。 どうぞご教授下さいm(__)m

  • 【Excel VBA】重複行の削除

    はじめまして。 IDの重複を削除し、日付データを横1列にまとめるVBAについてご教示いただけますと幸いです。 ------------------------------------------------------- ▼シート1(データ入力がされているシート)    A   B   C   D   E   F    1   ID 日付 2  1234  1/1  1/6  1/10  1/20   3  1234  2/3  2/20 4  1234  3/2 5  7777  1/10  1/15  1/20 6  7777  2/2   2/12  2/22 7  9876  2/3 ⇓ マクロ起動後 ▼シート2(重複行を削除しまとめたシート)    A   B   C   D   E   F   G   H 1   ID 日付 2  1234  1/1  1/6  1/10  1/20  2/3  2/20  3/2 3  7777  1/10  1/15  1/20  2/2  2/12  2/22 4  9876  2/3 【補足】 列情報  ・A列…ID  ・B-F列…日付(左詰め) ※日付はIDごと月毎に行が変わるため、IDによって複数行存在する場合があります。 ※A列のIDは重複しない場合もあれば、4行以上ある場合があります。 ※シート1のデータはおおよそ1000-5000行です。 ※IDに対して、日付は5つあれば問題ありません。そのためG列以降の日付を削除しても支障はございません。 ------------------------------------------------------ VBAの知識があまりなく、調べて出てきたものをコピペ使用も試みたのですが、 上手く動かす事ができませんでした…。 お力添え頂けますと幸いです…。 Windows10でエクセル2016を使用しております。 何卒宜しくお願いいたします。

  • エクセル 重複行色付(VBA)について質問です。

    Excelで、2ヶ所の場所を重複しているのかどうかチェックし、重複でしたらその行ごと色を付けたいと思っております。 |    A    |    B   |   C   |   D   |   E   |    田中    1046587920   8/2     8/6    100364987    鈴木    1098463612   8/3     8/5    125698001    森川    1548758743   8/20    8/23    103587410    川島    1046587920   8/22    8/23    100365871    森本    1046587920   8/25    8/26    100364987 例えば、上記の様な一覧があり 「B列」 と 「E列」 とで重複を確かめて、同じであれば色が付く様にVBAを組みたいのですが、現在調べて 「B列」 のみの重複に色付けは出来るようになったのですが、2ヶ所重複に色をつけることで困っております。 上の例で行きますと、田中さんと森本さんの行に色が付く形が理想でして、川島さんの、「B列」は該当しておりますが、「E」列が異なるため、色は付きません。 行数は。2万行前後になるのですが、関数を当てると処理が非常に重くなるため、VBAを試みております。 お知恵をお貸し頂けましたら幸いです。

  • Excel VBAで値が重複する行を削除する

    Excel2000を使っています。 シートAに数千件のデータがあります。 シートBのE列にある文字とシートAのD列の文字が重複する場合に、シートAの重複するセルがある行を削除する(且つできれば行のデータを抜き出すVBAを作ろうと考えています。 最近VBAの初心者本をやっと理解したところで、ちんぷんかんぷんとまではいかないけど、知恵熱がでました。 仕事なので自分でなんとかすべきかと思いますが、きっかけの調べ方がまずわからない。 どなたか、解かるきっかけだけでも与えて頂けないでしょうか。とくに、別シートの値と重複する値を探す場合に何をいれるかわかればきっと道は開けると思うんですが…。 初めての質問なので、質問内容が至らなかったらもうしわけありません。

  • エクセルで重複行をすべて削除するにはどうすればよいでしょうか?

    例えば、昇順で並べ替えて以下のようにエクセルで準備したとします。   A列 1行 aa 2行 aa 3行 bb 4行 bb 5行 cc 6行 cc 7行 dd 8行 ee そこで重複する行ごと削除したいのですがどうすればよいでしょうか? 削除結果は   A列 1行 dd 2行 ee 上記のようにしたいです。 重複する1行だけは削除できたのですが、 2行ごと削除の方法がわかりません。 ご教授いただきたく存じます。 よろしくお願いいたします。

  • EXCEL VBAの重複行削除について

    EXCEL2010を使用しています。 添付画像の「重複行削除 前」の表を、RemoveDuplicatesで下の様にコードを組んで A列で重複する行を見て重複する行を削除しています。 Public Sub 重複行削除()  With WorkSheets(1)   .Range(.Cells(1, 1), .Cells(8, 3)).RemoveDuplicates _      Columns:=1, Header:=xlYes  End With End Sub すると、日付の新しいデータが削除され、古いデータが残ってしまいます。 (添付画像の「重複行削除 後」) ReniveDuplicates Columns:=Array(1,3) とした場合は、すべてのデータが残ってしまいます。 添付画像の「欲しいデータ」の表の様に、 日付の新しいものを残すように重複行削除は出来ないでしょうか? 詳しい方、どうか教えてください。 よろしくお願いします。

  • 重複行を削除

    重複する行をVBAコードで削除したいのですが A列 B列 C列 あ  1  a あ  1  a あ  2  a い  1  a い  2  c い  2  c A列 B列 C列 あ  1  a あ  2  a い  1  a い  2  c のようにABC列同一文字は1行にしたいのですがVBAコード、関数の解る方ご教授願います。

  • 重複する行の削除の方法(VBA)

    エクセルのVBAで質問です。 以下のような表で、   A B C 1 赤 10 × 2 青 20 ○ 3 青 20 ○ 4 黄 30 × 5 緑 10 ○ 6 紫 15 △ 7 紫 15 △ 8 紫 15 △ Aのセルの要素が重複しているこのような場合に1つだけを残したい、 つまり3行目と7.8行目を削除したいのです。 (実際の列数は10、行数は1万程度あります) このような場合、どのようなマクロを組めばいいでしょうか? なお、最終行の場所は lngMaxRow = Cells.SpecialCells(xlLastCell).Rowによって取得しております。 出来れば後学のために処理の簡単な説明も付けていただけると助かります。 宜しくお願いします。

  • 重複行を削除するエクセルのマクロ

    重複している行を削除したいです。     A    B    C    D 1   a123   4567   PX2   0 2   a456   4567  PX3  5000 3   a789  4567   PX5   10 4   a567   4567   PX4   20 5   a123   4567   PX2   0 A行とC行を検索し両方が重複していたら重複している一行を削除するボタンを作りたいと思っております。どうぞご教授ください。

  • エクセル関数での重複削除

    以下のようなエクセル表があったとします。       【列A】  【列B】 【行1】   1     A社   【行2】   2     B社 【行3】   3     B社  【行4】   4     C社 【行5】   5     C社 【行6】   6     C社 この表の下のほうに、【列B】の社名を重複を削除した形で一覧表示させたいのです。この例の場合ですと、              A社              B社              C社 と表示させたいのですが。。。 フィルタ機能を使って重複を削除すれば同じようなことができるのですが、今後の更新作業を楽にするため関数でやりたいのですが、可能でしょうか。 教えてください。

専門家に質問してみよう