• ベストアンサー

重複するデータを抽出できる秀丸マクロ

今、重複を含む長大なメールアドレスのリストを扱っています。(100万件以上あります) 一行に一アドレスで約100万行あるのですが、ここから重複している分を抽出したリストを作りたいと思っています。 Excelで開けないファイルですので、秀丸エディタのマクロで解決できないかな、と思っています。 自分でマクロを書いたことはないので、この用途に使えるマクロなど紹介していただけると助かります。 宜しくお願い致します。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.3

100万行ではやっていませんが、以下のようなスクリプトを書いて実行すると、以下の結果が得られます。 スクリプト(dup.plの名前のファイルに格納します) -------------------- # 使用方法 # # perl dup.pl メールアドレスリストファイル # 機能:重複しているメールアドレスを表示する # 結果は画面に出力される。 #メールアドレスをテーブルに登録(件数もカウントする) while(<>){ chomp $_; $addr{$_} += 1; } #1つのメールアドレスが2件以上のものを出力する。 while( ($key,$val) = each(%addr)){ if ($val >= 2){ printf("重複メール=<%s> %d件\n",$key,$val); } } -------------------- メールアドレスのテキストをmail.txtとします。 内容は、以下の通りです。 -------------------------- xxxx1@yyy.co.jp xxxx2@yyy.co.jp xxxx3@yyy.co.jp xxxx4@yyy.co.jp xxxx5@yyy.co.jp xxxx@yyy.co.jp xxxx5@yyy.co.jp xxxx3@yyy.co.jp xxxx4@yyy.co.jp xxxx5@yyy.co.jp xxxx6@yyy.co.jp ---------------------- DOSプロンプトで perl dup.pl mail.txt とすると、 以下の結果が得られます。 ------------------------------ 重複メール=<xxxx5@yyy.co.jp> 3件 重複メール=<xxxx3@yyy.co.jp> 2件 重複メール=<xxxx4@yyy.co.jp> 2件 --------------------------------- この結果をファイルへ出力する場合は、 perl dup.pl mail.txt > out.txt とします。out.txtに結果が出力されます。 (perlをインストールしてperl.exeにパスを通す必要があります)

fugtat
質問者

お礼

私もまだ大きなファイルで試していませんが、数万件のファイルでしたら問題なく処理が可能でした。大変参考になりました。 有難うございます!

その他の回答 (2)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

秀丸で100万行読み込ませるのは、できたとしても、そこから更に重複行の削除は、重いような気がします。 私が、回答できる保証はありませんが、 参考までに、1行のデータは、どのようになっていますか? また、各行には、かならず、メールアドレスがついてますか。 メールアドレスがついてない行もありますか。 できれば、何行かのサンプルを提示して下さい。(アドレスは、個人情報が漏れないように伏せ字にして下さい。) もし、perlをインストールしてもよいなら、perlで処理するのが、最短の解決方法のような気がします。(参考URLのperlをインストールします)

参考URL:
http://www.forest.impress.co.jp/lib/stdy/program/progdevenv/activeperl.html
fugtat
質問者

補足

ご回答有難うございます。 下記の通り補足させていただきます。 リストの形式は、 「一行に一つのメールアドレスのみ」 という簡単なテキストデータです。 他のデータが入った行やブランク行はありません。 perlのインストールも検討してみます。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

100万の単位であればSQLの出番ではないでしょうか?

fugtat
質問者

お礼

やはり難しいでしょうか… ご回答有難うございました。

関連するQ&A

  • 秀丸のマクロ:こんなの作れますでしょうか?

    秀丸エディタv3.08(レジスト済)で、次のようなマクロを作りたいです.秀丸マクロ作成の経験はありませんが、C言語の経験が数年あります. - DOS上のバッチファイル mybatch.bat を呼び出すと、次のようなことをして欲しいと考えています - mybatch.batの中身は一行で、こんなイメージです.  hidemaru.exe tmp.txt /x a.mac - 更に a.macの中身はというと次のような作業をして欲しいのですが  (1) 立ち上がったら、いきなり、全選択(Ctrl-A) (2) クリップボードに(事前に入れておいた)データをいきなり貼り付け(Ctrl-V) (3) ファイルを、いきなり(上書き)保存 (4) いきなり終了させる. ヘルプを見たのですが、いまいちよく解りませんです(;_;). もしかして上のようなことは、できないのかな、と思ってしまいます. 秀丸のマクロを書くのは初めてで、さっぱり解りません.この領域に、詳しいかたどうぞ教えてください.よろしくお願いします. -------------------------------------------------------------- なお、もし(4)が不可能な場合は、秀丸を終了させないで置くつもりです. この場合は、次のことが知りたいです.  知りたいこと:「今さっきまで(1)(2)(3)等のような操作を受けてactiveだったが今は非activeの状態にされてしまった秀丸が一つだけあるとした場合、DOS窓からどのようなコマンドをうつと、その秀丸をactiveにできるか」を知りたいです. よろしくお願いしまうす.

  • エクセルマクロで重複数値と以外の数値を抽出する

    数値の表を作成しておりますが、 重複数値で困っております。マクロで教えてください。 A列11~20まで1.2.2.4.5.6.6.8.9.10とあるデータに 2と6が重複しています 重複数値2.6をB列2行目以降に、C列2行目以降にはそれ以外の1.4.5.8.9.10 を抽出したいのですが、マクロで教えてください。 (offsetを使ってできますか?) また、重複数値を抽出する自作関数ってできるでしょうか? よろしくお願いいたします。

  • 重複しないデータの抽出について

    こんにちわ。 エクセルでつぎのようなリストがあるとします。A,B列セットで重複しないデータを一度に抽出したいのですが、どうしたらいいですか?    A列     B列     1     1     1 2     1     2     3     2     1 4     1     2 5     2     2 6     1     1 結果 A列    B列       1    1       1    2       2    1      2    2

  • エクセル2016で重複データのみ抽出

    ホームタブ、「条件付き書式」でセルの強調表示ルールの「重複する値」で設定すると、重複する値に色をつけられますね。 この「色のついた」セルを含む行のみを抽出する方法はありますか? 例えば、 1 2 2 3 3 3 4 5 6 6 という列で重複チェックをすると、 2 2 3 3 3 6 6 に色をつけることはエクセルの機能で可能ですが、この行のみ表示で絞り込みたいです。 よろしくお願いします。

  • 秀丸エディタ・マクロの質問です

    秀丸エディタを使用して、以下のマクロの作成のやり方を教えてください。 元ファイルから必要なデータの抽出・計算を繰り返して下記の例のような形式で表示したいです。 (ここではAAAAA・BBBBB・CCCCC・DDDDD・hijkの表記のある行を抽出し、 「BBBB-AAAAA+1」「DDDDD-CCCCC」の結果をかかった時間1:、かかった時間2:の横に表記する。 これらの作業を10000件以上繰り返す。 ------------------------------------------------ 例)元ファイル 2013/3/6 10:10:10.100 AAAAA 2013/3/6 10:10:10.110 BBBBB 2013/3/6 10:12:12.120 hijk 2013/3/6 10:14:14.140 CCCCC 2013/3/6 10:14:14.150 DDDDD 2013/3/6 10:15:15.130 abcde 2013/3/6 10:15:16.100 AAAAA 2013/3/6 10:15:16.108 hijk 2013/3/6 10:15:16.110 BBBBB 2013/3/6 10:15:18.150 lmn 2013/3/6 10:15:19.140 CCCCC 2013/3/6 10:15:19.150 DDDDD … …(省略:10000行以上) … 2013/3/6 11:18.20.150 DDDDD ------------------------------------------------ 例)ほしい結果 2013/3/6 10:10:10.100 AAAAA 2013/3/6 10:10:10.110 BBBBB 2013/3/6 10:12:12.120 hijk 2013/3/6 10:14:14.140 CCCCC 2013/3/6 10:14:14.150 DDDDD かかった時間1:11msec(2行目-1行目+1) かかった時間2:10msec(5行目‐4行目) 2013/3/6 10:15:16.100 AAAAA 2013/3/6 10:15:16.108 hijk 2013/3/6 10:15:16.110 BBBBB 2013/3/6 10:15:19.140 CCCCC 2013/3/6 10:15:19.150 DDDDD かかった時間1:11msec(9行目-7行目+1) かかった時間2:10msec(12行目‐11行目) … …(省略:10000行以上) … ------------------------------------------------ 現状で以下の2つのマクロを作成しました(元ファイルで実行します) マクロ1.「AA…~DD…」を含む行の抽出+「かかった時間1:、かかった時間2:」の表記をDDDDDの下に挿入するマクロ マクロ2.時間のみの抽出を行うマクロ(下5ケタのみ 例:10100 小数点は削除) これら2つのマクロを同時に動かし、最終的に上記のような形式にまとめる予定です。 (もしかしたら1つのファイルで動かせるのかもしれませんが、わからなかったので二つにわけました;;) 現在、マクロ2.で抽出した時間からどのようにして「BBBB-AAAAA+1」「DDDDD-CCCCC」を 行えばいいか、また、計算した値をどのようにして「かかった時間1:、かかった時間2:」の 横においていけばいいかがわからない状態です。 マクロ自体さわったことがなく、もう一週間悩んでいます。 どなたか馬鹿な私に教えていただけないでしょうか

  • 秀丸エディタのマクロ整形1

    秀丸エディタのマクロ整形1 秀丸 整形&連続&引用マクロ Ver.2.15 作者 noro 1999/03/09 をダウンロードしました。 ●(Q08)整形の桁折りの位置を70に固定していますが、変更するのは、どうしますか? ●(Q09)現在の秀丸エディタのバージョンで、マクロは、問題無く動くでしょうか? ●(Q10)現在、noroさんのメールアドレスは、現在登録されてなく連絡出来ません。新しい連絡先を誰かご存知でしょうか? ●(Q11)報告書などの整形マクロを使いたいのですが、このマクロ以外に皆さんのお気に入りのマクロを教えていただけませんでしょうか?  たとえ、一つだけでも、お知りのことが有りましたら、よろしく教授方お願いします。 敬具

  • 秀丸、またはSAKURAエディタでマクロを…

    Grepをかけて、 挿入:   作成年月日~ という行であればカウントせず、 挿入:   '作成年月日~ という行であれば数えて、その数を出力してくれるようなマクロを 作りたいと思っています。 挿入:(直後にスペースが入るが数は一定ではない)のすぐ後に アポストロフィがあれば、数えるようにしたいのです。 このようなマクロを、秀丸、またはSAKURAエディタで作るには どうしたら良いでしょうか? ご教授ください。

  • 重複データを抽出して、重複データごとに印刷する

    重複データを抽出して、重複データごとに印刷する こんにちは。Excel2007を使っています。 購入代金の請求をするにあたり、請求数が5を超える場合には 請求書をまとめて発送したいと考えています。 データはエクセル上に入っています。     A      B  1  宛先     金額  2  ○×商店   243,000円  3  ○×商店    14,990円  4  ○×商店   240,100円  5  ○×商店    33,400円  6  ○×商店    1,000円  7  △△(株)    3,000円  8  △△(株)    1,500円  9  □×商会   243,000円  10  □×商会    14,990円  11  □×商会   240,100円  12  □×商会    33,400円  13  □×商会    1,000円  14  □×商会    1,000円  …  …  1000 △○×会    3,500円 この場合、○×商店と□×商会は請求書の数が5を超えているので、 まとめて発送の対象になります。 その、まとめて発送するリストを作成したいのです。 具体的には、重複が5未満のデータを削除して、重複が5以上のデータだけ残し、 さらに宛先ごとの送付リストを作成したいのです。 (重複宛先の最後に改ページを挿入して、まとめて印刷出来れば、と思います) このようなリストを簡単に作成するには、どのようにしたらよいでしょうか? 今は、重複しないデータを目で見て削除して、5通を超えるものの宛先の最後に改ページを 入れるというのを一々手作業でやっています…(>_<) マクロを使えばできるのか、エクセルの機能を使えばできるのか見当もつかなかったので、 こちらで質問させていただきました。 もし簡単に出来る方法があればご教授いただけるとありがたいです。 回答よろしくお願いいたします。

  • エクセルの重複データを抽出し、最新のデータを残した

    エクセルの重複データを抽出し、最新のデータを残したいです。 A列 B列 1 aaa@aaaa.co.jp 2014/1/1 2 bbb@aaaa.co.jp 2013/1/2 3 aaa@aaaa.co.jp 2014/1/10 4 aaa@aaaa.co.jp 2014/10/10 A列にアドレス、B列に日付が入っているデータがあります。 (他にC列などにも顧客情報が入っています。) アドレスの重複データを抽出し、最新の日付の行が残るようにしたいです。 この場合ですと2と4が残るようにしたいです。 膨大なデータの為、困っています。 良い方法をご存知の方、よろしくお願い致します。

  • エクセル2003 重複データの抽出

    エクセル2003を使っています。 重複したデータの抽出を行いたいのですが、 例えば、  A      B     C      D コード  書籍名  出版社名  著者 といった感じのデータが1万件ほどあります。 このうち、B列の「書籍名」が重複しているデータを抽出したい です。(抽出したものは、書籍名だけではなくて、ほかの出版社や著者の指定したデータも表示させたい。) VLOOKUPなどを使えばできないこともないのですが、一万件の 処理を行う上に、パソコンも非力なので時間がかかってしまい 困っています。 どうぞよろしくお願いします。

専門家に質問してみよう