• ベストアンサー

VBA 重複データの削除方法

いつもお世話になっております。 VBAを学習中の初心者です。 重複するデータの行を削除を行いたいのですが、ご指導をよろしくお願いします。 添付ファイルの左側のようなデータを作成しました。 作成したいデータは右側です。 同一日ごとに項目1,2,3が全く一緒になる行を削除したい。以上です。 なるべく理解しやすいコードでご指導いただけると助かります。 よろしくお願いいたします。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! すでに回答は出ていますが・・・ 元データがSheet1にあり、Sheet2に表示するようにしてみました。 標準モジュールです。 Sub Sample1() Dim lastRow As Long Application.ScreenUpdating = False With Worksheets("Sheet1") lastRow = .Cells(Rows.Count, "B").End(xlUp).Row .Range("A:B").Insert Range(.Cells(2, "A"), .Cells(lastRow, "A")).Formula = "=IF(C2="""",A1,C2)" With Range(.Cells(2, "B"), .Cells(lastRow, "B")) .Formula = "=A2&""_""&E2&""_""&MOD(ROW(),3)" .Value = .Value End With .Range("B:B").AdvancedFilter Action:=xlFilterInPlace, unique:=True Range(.Cells(1, "C"), .Cells(lastRow, "E")).SpecialCells(xlCellTypeVisible).Copy Worksheets("Sheet2").Range("A1") .ShowAllData .Range("A:B").Delete End With Application.ScreenUpdating = True End Sub こんな感じではどうでしょうか?m(_ _)m

genta1019boston
質問者

お礼

ありがとうございます。

その他の回答 (1)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

こんな感じでしょうか。 日付は昇順に並んでいるものとしています。並んでいないと、違った手順になります。 バックアップして試してください。 'シートのコードウィンドウ (Excel2010) Sub RowDelete()   Dim rw As Long '検索行カウンタ   Dim rwD As Long '削除行カウンタ      rw = 2  '開始は2行目   While Cells(rw, 1) <> ""     '3行単位に調べる     rwD = rw + 3     While Cells(rw, 1) = Cells(rwD, 1)       '日付が一致したら       If Cells(rw, 3) = Cells(rwD, 3) And _        Cells(rw + 1, 3) = Cells(rwD + 1, 3) And _        Cells(rw + 2, 3) = Cells(rwD + 2, 3) Then         '内容が一致したら3行3列を削除して上に詰める         Range(Cells(rwD, 1), Cells(rwD + 2, 3)).Delete Shift:=xlUp       Else         '同じ日付で一致しなかったら次の3行を調べる         rwD = rwD + 3       End If     Wend     '次の3行(同じ日を調べることになるかもしれないが、まぁいいか)     rw = rw + 3   Wend End Sub

genta1019boston
質問者

お礼

ありがとうございます。

関連するQ&A

  • 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) とした場合は、すべてのデータが残ってしまいます。 添付画像の「欲しいデータ」の表の様に、 日付の新しいものを残すように重複行削除は出来ないでしょうか? 詳しい方、どうか教えてください。 よろしくお願いします。

  • エクセルで重複データを削除する方法

    エクセル2000です。 日付■お名前■住所■電話番号■メールアドレス■担当者■広告媒体■製品名■製品コード■ こんな感じのデータが約10000行あります。 でいろんなやり方があると思うのですが、重複データが100くらい存在します。 この重複データを削除する方法として、どんな方法があるのでしょうか? (ピボットテーブルを利用してデータの個数をかぞえて重複しているセルを 行を削除していくという方法しかいまのところ思い浮かびません。) VBA等は利用できません。 どなたかご教授いただけると幸いです。

  • VBA教えてください。重複データの削除

    エクセルからエクセルへのデータ取り込み、重複データ削除の方法について、とても時間がかかっており、ご教授いただきたいと思い、質問させていただきます。 よろしくお願い致します。 台帳(エクセル)とシステムから出力するcsvファイル(エクセル)があります。 csvファイル(エクセル)のデータを、台帳(エクセル)で管理します。 ‘csvファイル:商品コード、商品名、注文日、納期、などなどA~AZ列まで、1行目は項目名で、その後、1行1商品で2000行ほどデータがあります。 現在進行形のデータが全て出力されるため、台帳にあるデータと重複するものと、新規データがあり、新規データのみを台帳に追加していきたいです。 重複かどうかの判断は、A列の通し番号で判断しています。 台帳:シート4つで進捗を管理しています。 シート(1);csvファイルからデータを取り込むシート      一度出力データ全てを取り込み(※1)、シート(2)、(3)に重複があるデータを削除します(※2)。 シート(2):(1)から次工程にデータを送ったらこちらに移動(0~500行ほどあります) シート(3):(2)から次工程にデータを送ったらこちらに移動(5000行ほどあります) ※1は3秒ほどで完了するのですが、※2は1分近く時間を要しています。 もう少し短くならないかと思うのですが、いかがでしょうか。よろしくお願い致します。早ければ早いほどいいですが、10秒以内を目標にしています。 今は、csvファイルから全データをエクセルに取り込んでから(3秒ほど)、重複削除していますが、csvファイルから取り込むときに、重複データを取り込まないほうがいいのでしょうか。 現状、このような感じです。 Sub 重複削除() Dim i As Long Application.ScreenUpdating = False Application.Calculation = xlCalculationManual ‘BA列にある重複チェックが2以上のとき、削除 For i = 5000 To 5 Step -1  If Worksheets("(1)").Cells(i, 53).Value > 1 Then Rows(i).Delete End If Next i ‘BA列に重複チェックを再設定 Application.Calculation = xlCalculationAutomatic Cells(5, 1).Select Range("BA5") = "IF(A5="""","""",COUNTIF($A$4:$A5,A5)+COUNTIF((2)!$A:$A,A5)+COUNTIF((3)!$A:$A,A5))" Range("BA5").Select Selection.Copy ‘関数を値へ変換 Range("BA6:BA2000").Select ActiveSheet.Paste Application.CutCopyMode = False ‘行幅を整える Rows("5:5").Select Range(Selection, Selection.End(xlDown)).Select Selection.RowHeight = 15.75 Range("A5").Select Application.ScreenUpdating = True '画面描画を静止 End Sub

  • (VBA)重複の削除後、合計を出したい

    ご覧頂きありがとうございます。 画像の通りデータを統合するマクロのコードを作成したいです。 ・「会社名」が同じかつ「振出日」と「満期日」が同じなら、 「金額」を合計し重複する行を削除 するよう動作させるにはどのように書けばよいでしょうか。 ご教示いただけますと幸いです。

  • エクセルで重複していないデータを削除したい

    A列 あいうえお あいうえお あいうえお かきくけこ かきくけこ さしすせそ たちつてと たちつてと なにぬねの ↓↓↓ 重複していないデータをスマートに削除したい あいうえお あいうえお あいうえお かきくけこ かきくけこ たちつてと たちつてと 上記のように重複しているデータと重複していないデータがあり、 あいうえお順に並んでいるデータがあります。 このデータの重複していないデータだけをスマートに削除できるやり方が分かりません。 スマートな削除方法を教えてください。 列項目はかなり有り、行も4000件以上あるデータです。

  • エクセルVBAで重複データの削除

    A列、B列、C列・・・とデータが入っていて、B~D列の5行目から10行目が関連の有るデータのかたまりとします。 C~D列の全てのデータが重複している場合に、最初のほうのデータ(行番号が小さいほう)を残すものとして、重複データを削除したいのです。 削除するときは、 B~Dの範囲で削除する。A列等は削除しない。 削除したらデータは上に詰める。 データはソートしない。 ということをやりたいのですが、簡単に出来ますでしょうか? 良く覚えていないのですが、ネット上で色々探してみても、必ずソートしている気がしたので、ソートしない方法が知りたいのですが。

  • 重複データの削除

    お世話になります。 現在、仕事でお客様のデータ(5万件くらい)を扱っています。 しかしデータをエクセルに取り込むシステムに難があり、同じお客様のデータを重複して取り込んでしまうことがあります。 そこで質問ですが、約5万件あるデータの中から効率よく重複データを削除する方法はありますか? 懸念事項は、同姓同名の方は削除してはいけないという点です。 データ項目は「名前」「住所」「生年月日」「性別」とあるので、 同姓同名でも生年月日や住所で判定することができます。 ちなみに私の考えは、 A列に名前、B列に生年月日とすると・・・ 1)ソート:優先順位はA列⇒B列 2)C列にIF(A1=A2,"重複","OK")として行方向へコピー   D列にIF(B1=B2,"重複","OK")として行方向へコピー   E列にIF(AND(IF(C1="重複",D1="重複")=TRUE,"重複","OK")として行方向へコピー 3)E列で"重複"でフィルタリングし、フィルタされた行の削除 スマートではないですが、私の知識では精一杯です。 何かスマートな方法はないものでしょうか? よろしくお願いいたします。

  • Excelの重複データーを削除したい

    Excel 2010 の A列 に複数のデーターがあります。これをExcelの機能で昇順に並べ替えます。 重複したデーターが有れば削除し、ブランク行のない状態にするため VBA で処理していますが、この作業を簡単に行える良い方法が有れば教えてください。

  • エクセルVBAで重複する行を削除したい

    エクセルVBAで重複する行を削除したいと考えています。 フィルタオプションの設定でやればできるのですが、 VBAでやろうと考えています。 どうしたらいいのしょうか。 よろしくお願いします。

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

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

専門家に質問してみよう