• ベストアンサー

高速で重複データを削除するには?

Excelにて.csvの重複データーを高速で削除するには どのようにしたら良いでしょうか? 下記のように複数の.csvファイルのA列に数万とURLリストが御座います。 A 1 http://rank-one/tako/ 2 http://rank-one/tako/ 3 http://rank-one/asdd/ 下記の方法も試しましたが、.csvファイルの量も半端ではないので マクロか何かを出来ないものでしょうか? B2: =COUNTIF($A$2:A2,A2) とオートフィルターを使った方法ですと時間もそれなりにかかってしまいます。 マクロを使ったご回答などもいただければとても助かります。 他に良い方法があれば、どなたかご教授いただければ幸いです。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

フィルタオプションで重複データを表示しないように出来ます。 結果(範囲)をコピーして別シートに貼付ければ完了です。 http://www.asahi-net.or.jp/~ef2o-inue/kihon/sub01_05_19.html 上記の操作を記録マクロなどに残して呼び出して使えば良いかも知れません。

ryoryu2002
質問者

お礼

どうもありがとうございました。

ryoryu2002
質問者

補足

ご回答ありがとうございます。 私が希望しているものとは少し違いますね(^^; 上記の方法も結局は時間がかかってしまいます。 1度の作業で重複データは削除といったようなのが、理想だと思っています

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.5

恥も外聞も無く、再度しゃしゃり出てきました      A 1 http://rank-one/tako/ 2 http://rank-one/tako/ 3 http://rank-one/asdd/ となっているのを      A 1 address 2 http://rank-one/tako/ 3 http://rank-one/tako/ 4 http://rank-one/asdd/ と一行ずらして空いた所へ Address と入れて下さい で下記を標準モジュールへ 並べ替えは出来ませんが抽出は出来てると思います。。。多分 ごみレスかもしれませんがご容赦を。 Sub test2() Dim cnXL As Object Dim rsXL As Object Dim wS As Worksheet Const adOpenDynamic = 2 Set wS = Worksheets("sheet1") Set cnXL = CreateObject("ADODB.Connection") With cnXL .Provider = "MSDASQL" .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;" .Open End With Set rsXL = CreateObject("ADODB.Recordset") rsXL.Open "select address from [sheet1$] group by address", _ cnXL, adOpenDynamic 'wS.Cells(1, 1).CopyFromRecordset rsXL 'A列に上書き wS.Cells(2, 2).CopyFromRecordset rsXL rsXL.Close: Set rsXL = Nothing cnXL.Close: Set cnXL = Nothing End Sub

ryoryu2002
質問者

お礼

どうもありがとうございました。

ryoryu2002
質問者

補足

いえいえ、とんでもございません。 ご回答ありがとうございます^^ 下記のアドレスはどのような拡張しで保存・使用すればよいのでしょうか? 下記の文字の使い方がいまいち分からなくて、申し訳御座いません。 Sub test2() Dim cnXL As Object Dim rsXL As Object Dim wS As Worksheet Const adOpenDynamic = 2 Set wS = Worksheets("sheet1") Set cnXL = CreateObject("ADODB.Connection") With cnXL .Provider = "MSDASQL" .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;" .Open End With Set rsXL = CreateObject("ADODB.Recordset") rsXL.Open "select address from [sheet1$] group by address", _ cnXL, adOpenDynamic 'wS.Cells(1, 1).CopyFromRecordset rsXL 'A列に上書き wS.Cells(2, 2).CopyFromRecordset rsXL rsXL.Close: Set rsXL = Nothing cnXL.Close: Set cnXL = Nothing End Sub どうかよろしくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.4

No.3 です 先ほどのは『ゴミ』です。忘れて下さい (^^ゞ

ryoryu2002
質問者

お礼

どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.3

1行に行を挿入しA1に Address と入れてください、以下アドレスが連なっているとして シート名を、Sheet1 とした場合 標準モジュールでこんな風では? ※バックアップは必ず!!!!!!!!!!!!!!!とってから。お願い! Sub test()   Dim cnXL As Object   Dim rsXL As Object   Dim wS As Worksheet   Const adOpenForwardOnly = 0      Set wS = Worksheets("sheet1")   Set cnXL = CreateObject("ADODB.Connection")   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"     .Open   End With   Set rsXL = CreateObject("ADODB.Recordset")   rsXL.Open "select address from [sheet1$] group by address order by address", _     cnXL, adOpenForwardOnly   'wS.Cells(1, 1).CopyFromRecordset rsXL 'A列に上書き   wS.Cells(1, 2).CopyFromRecordset rsXL   rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing End Sub

ryoryu2002
質問者

お礼

どうもありがとうございました。

ryoryu2002
質問者

補足

ご回答ありがとうございます。 上記のアドレスはどのような拡張しで保存・使用すればよいのでしょうか? どうかよろしくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • Cupper
  • ベストアンサー率32% (2123/6444)
回答No.2

記録マクロで作業手順を覚えさせては如何ですか。 マクロにショートカットキーを割り付ければ、以後ボタン一発で終ります。 マクロを書き起こしたり、他の方の回答を待つ間に作業が終るかもしれませんよ。

ryoryu2002
質問者

お礼

どうもありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセルで、重複データを除外して小さい値順に並べ替える関数

    A列に、 500 80 200 200 100 300 と、データがあります。このデータのうち、重複しているデータ(200)を一つだけ表示させ、かつ、小さい順に並べ替えて、下記のようにしたいのですが…。 80 100 200 300 500 調べてみて重複データをチェックする方法や削除する方法などはありましたが、並べ替える方法が見つかりません。フィルタオプションかと思いましたが使い方がよくわかりません。配列数式のこともわかりません。オートフィルタやマクロは使いたくありません。よろしくお願いします。

  • エクセル2000:こんな重複チェックの仕方を教えてください

    下記B列のように関数を入れると、重複していないものが1、しているものが2以上の数値を返します。「1」で、オートフィルタをかけると重複したものを表示しないと思いきや、下の例では山田太郎も当然、表示されません。そこで、山田太郎のうち、一回目の山田太郎は「1」で返すということはできますか?そうするとオートフィルタで正しい重複チェック後の抽出ができると思うのですが・・・。それとももっと簡単な方法はあるのでしょうか?   A       B       B列に入れる計算式       =COUNTIF(A:A,$A1) 山田太郎   2 川村花子   1 山田太郎   2

  • 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

  • Excel2010重複しないカウントとフィルタ結果

    Excel2010で、重複しない文字をカウントしつつ、オートフィルターで 抽出をかけた時には表示したデータをカウントする関数を作成したいのですが うまくできません。 作成しているExcelの表には、オートフィルターが設定されています。 A列には複数名の人の名前が入っていて、名前には重複もあります。 オートフィルターでの抽出条件が指定されていない状態で A列の重複しない人数を下記数式で出しています。  =SUMPRODUCT(1/COUNTIF(A1:A100,A1:A100)) オートフィルターで、例えばA列で3人の名前を抽出した場合に、 上記数式が入っているセルに「3」と表示をさせたいのですが できますでしょうか? できれば作業列を使用することなく、ダイレクトに該当セルに算出できる方法が あれば知りたいです。 お分かりの方いらっしゃいましたらご教示頂けると助かります。 どうぞよろしくお願いいたします。

  • エクセルでデータの「どこで重複か」を見つける

    エクセルでデータが「どこで重複しているか」を見つける方法として 以前質問した際に教えていただいたのが B1セルに次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",IF(COUNTIF(A$1:A1,A1)<=1,"","重複No."&COUNT(A$1:A1,A1))) これで重複があれば上の行から数えてその行のA列に有るデータが何番目の重複であるかがB列に表示されます。 ということでしたがこれには漏れがありました。 =IF(A1="","",IF(COUNTIF(A:A,A1)<=1,"","重複No."&COUNT(A:A,A1))) とすると漏れはありませんが、No.はすべて「0」となるのです。 何番目の重複かが分かる方法はありませんか。

  • 重複削除の高速化

    ■フィールド数は1つ。 ■レコード数は400万件程。 毎日30万件ほど追加して重複削除を行っています。 現在下記のSQLで処理していますが、相当な時間がかかります。 高速化する方法、または高速に重複削除できるSQLがありましたら ご教授お願いします。 ----------------------------------------------------------- CREATE TABLE temp_hoge as SELECT distinct * FROM `hoge` DROP TABLE hoge; ALTER TABLE temp_hoge RENAME TO hoge; -----------------------------------------------------------

    • ベストアンサー
    • MySQL
  • Excelで、重複データを一括で削除する方法

    お世話になっております。 Excelで、重複データを一括で削除する方法について 300列ほどあるデータがあります。 (行数は、各列に30行ほどです) 各列には重複するデータがあります。これを削除したく。 なお、各列(隣の列)は、関連性がありません。 よって、複数の列を参照して重複データを削除する必要はなく A列内の重複データ、B列の重複データをそれぞれ削除したいのですが、 フィルタオプションからの重複データを無視する、や、重複データの削除 機能では、1列ずつ実行することで可能ですが、300列以上あるので 現実的ではありません。 そこで、一括で各列の重複データを削除する方法を教えてください。 ※なお、列は300ほどあるため、作業用(countifで重複をピックアップした後、フィルタして 削除など)の方法は、列分つくるのは現実的ではないため、それ以外の方法はないでしょうか。 よろしくお願いします。

  • エクセルで重複するデータを簡単に削除したい

    エクセル 2010 を使用しています。同じ行内の重複するデータを削除する場合,「データ」リボンの「フィルタ」-「詳細設定」で「重複するデコードは無視する」にチェックを入れるようにして行なっています。この一連の作業をマクロなどで設定して,ツール・ボタンに割り付ければ簡単にできると思うのですが,このようなことは可能でしょうか?同じ行内の重複するデータを削除できるのであれば,全く違う方法でも問題ありません。情報をいただければ幸いです。

  • Excel 2007 重複データのチェックについて

    Excel 2007 重複データのチェックについて A列にあるデータ(約100件)で重複している値がある 行についてB列にフラグをつけます。 やりたいことはどの行とどの行が重複しているのかを すぐに分るようにしたいです。 添付画像のように重複している行に番号をつけていくことは可能でしょうか。 番号は1から順番に増えていきます。 自分は下記を考えましたが、これでは重複している行に「重複データ」と入る だけでわかりづらいです。 =IF(COUNTIF($A$2:A2,A2)>1,”重複データ”,”○”) よろしくお願いいたします。

  • 重複データの削除

    お世話になります。 現在、仕事でお客様のデータ(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列で"重複"でフィルタリングし、フィルタされた行の削除 スマートではないですが、私の知識では精一杯です。 何かスマートな方法はないものでしょうか? よろしくお願いいたします。

このQ&Aのポイント
  • 入院中に誤ってACアダプターを捨てられてしまい、代わりのACアダプターを購入したいのですが、適切な案内を得られません。
  • ideacentreAIO520-24IKLで本体側には20V-4.5Aとあり90Wとは分かるのですが、接続部分であるスリムチップのサイズが判らず、適切なACアダプターを教えて頂ければ幸いです。
  • Lenovoデスクトップ(IdeaCentre・Lenovo等)のACアダプターを購入したいです。入院中にACアダプターを失くしてしまったため、代わりのACアダプターを購入したいのですが、適切な案内が得られません。ideacentreAIO520-24IKLの本体側には20V-4.5Aとあり、90Wであることは分かるのですが、接続部分であるスリムチップのサイズがわからず困っています。ご協力お願いします。
回答を見る

専門家に質問してみよう