• 締切済み

エクセルの重複データで古い日付のものを削除する方法

エクセルのリストの中からa列に記載されてる名前が重複しているものを抽出し、b列に記載されてる日付が新しい方を残し、日付が古い方を全て削除するマクロを作りたいのですが、どういう風に言語を記述すればよろしいでしょうか? よろしくお願いいたします。

みんなの回答

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

以下の手順をマクロの記録で行うことでもよいでしょう。 基本的にはマクロを使わなくとも次のようにすることで関数処理で対応することができます。 ご質問ではA列で名前が重複しているものをまず抽出し、そのうちで日付が古いものを削除するとのことで良いのですね。 例えばシート1でA列の名前はA2セルから下方に、B2セルから下方には日付が入力されているとします。F列までの表になっているとします。 G列を作業列としてG2セルには次の式を入力して下方にドラッグコピーします。A列で入力されている最も下の行よりもさらに下行の行までドラッグコピーします。 =IF(AND(A2<>"",COUNTIF(A:A,A2)<=1),"",IF(COUNTIF(A$2:A2,A2)=1,ROUNDDOWN(MAX(G$1:G1),-5)+100000+B2,IF(COUNTIF(A$2:A2,A2)>1,ROUNDDOWN(INDEX(G$1:G1,MATCH(A2,A$1:A1,0)),-5)+B2,IF(ROW(A1)<=COUNT(B:B)+INT(MAX(G$1:G1)/100000),(ROW(A1)-COUNT(B:B))*100000,"")))) そこで名前が重複している方の日付が最も新しい行のデータをシート2に表示させることにします。 シート2のA1セルから右横の列にはシート1の項目を入力します。 A2セルには次の式を入力して右横方向にF2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(ROW(A1)>INT(MAX(Sheet1!$G:$G)/100000),"",IF(ROW(A1)=INT(MAX(Sheet1!$G:$G)/100000),IF(INDEX(Sheet1!$A:$F,MATCH(MAX(Sheet1!$G:$G),Sheet1!$G:$G,0),COLUMN(A1))=0,"",INDEX(Sheet1!$A:$F,MATCH(MAX(Sheet1!$G:$G),Sheet1!$G:$G,0),COLUMN(A1))),IF(INDEX(Sheet1!$A:$F,MATCH(SMALL(Sheet1!$G:$G,RANK((ROW(A1)+1)*100000,Sheet1!$G:$G,1)-1),Sheet1!$G:$G,0),COLUMN(A1))=0,"",INDEX(Sheet1!$A:$F,MATCH(SMALL(Sheet1!$G:$G,RANK((ROW(A1)+1)*100000,Sheet1!$G:$G,1)-1),Sheet1!$G:$G,0),COLUMN(A1))))) B列のデータはシリアル値で表示されますので「セルの書式設定」の「表示形式」で「日付」の中から選んでください。 これでシート1に新しいデータが入力されれば自動的にシート2の表が変わります。 なお、名前が重複していない方のデータと名前が重複している方についてはその最新のデータを表示するのでしたら、シート1のG2セルに入力する式は次の式にします。シート2での式は変わりません。 =IF(ROW(A1)<=COUNT(B:B),IF(COUNTIF(A$2:A2,A2)=1,ROUNDDOWN(MAX(G$1:G1),-5)+100000+B2,ROUNDDOWN(INDEX(G$1:G1,MATCH(A2,A$1:A1,0)),-5)+B2),IF(ROW(A1)<=COUNT(B:B)+INT(MAX(G$1:G1)/100000),(ROW(A1)-COUNT(B:B))*100000,""))

tarabon
質問者

お礼

ご丁寧にありがとうございます。試してみます。

noname#217196
noname#217196
回答No.1

並べ替えしておいてから、作業列を使って削除可能か判定する数式を貼り付け(添付図参照のこと)。 オートフィルタを使って、削除フラグが1の値の行だけ抽出後、その行を選択して削除。 オートフィルタをはずしたあと、再度並べ替えで、削除後残った空行を表外に追い出す。 以上の手順を、マクロ記録しておいて、必要に応じて修正したらいいでしょう。

tarabon
質問者

お礼

ご丁寧にありがとうございます。試してみます。

関連するQ&A

  • Excelで同じ商品名で、かつ日付が古いものを抽出する方法

    ご存知の方、いらっしゃいましたらお願いします。 Excelは2003を使用しています。 複数の条件での抽出で名前が決まっているものは「フィルタオプションの設定」で行っていますが、日付が古いもの、新しいものの抽出方法がわかりません。 「同じ商品名」かつ「日付が古いもの」を抽出したいのですが、それが出来そうな関数、マクロはありますでしょうか。 当方マクロ知識は「マクロの記録」程度です。 A列  B列    C列 商品A 2007/12/01 10:00 商品B 2008/04/01 10:00 商品A 2008/05/01 10:00 現在は目視、手動で★印を別列につけ、それを抽出し削除しています。 削除フラグとして★印等をつけるようなものでも、わかれば嬉しいです。

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

    横17列、縦、約1000行の表があります。 4行目が項目で、5行目以降は次のように並んでいます。 A列(日付)、B列~H列(各データ) I列(契約番号)J列~Q列(各データ) 縦の並び順は、ばらばらで、日付順ではありません。しかも結構重複があります。 そこで、I列の商品番号をキーにして、重複をチェックし、重複しているものは、日付が新しいものを生かし、古い方は削除しようと思います。 しかし、手作業でやるにはあまりに多すぎるため、出来ればマクロでやりたいのですが、このように高度なものは、わたしが出来るマクロの記録程度では手におえそうもありません。 どのようにやったらよいのかどなたかお教え願えませんでしょうか?

  • マクロにて重複データの削除を行う方法

    エクセルにてD列、H列において重複が両方に存在する場合に (D列にて重複かつH列にても重複する場合) そのデータを行ごと削除したいのですが、 上記のマクロの記述が分からず困っております。 どなたか方法をご伝授いただけたらうれしいです。

  • エクセル教えてください 重複データの削除方法

    エクセルは良く使っていますが、レベルは初級の上です。 同一セル内に複数の重複データが入っていますが、重複しないものを抽出し 新しいセルに入れたいと思っています。 重複データの区切りは、セミコロン";" パイプ区切り"|",空白、改行が混在しています。 重複しないものを、新しいセルに入れたいのですが、どのようにしたら良いでしょうか? 新しいセルでのデータ区切りは、コンマ(又はパイプ区切り)にしたいと思っています。   例で説明します。 A列(番号) B列(元のデータ)             C列(重複を除いたデータ)  1      タイ ベトナム 中国|タイ|タイ         タイ,ベトナム,中国    2      インド ベトナム|インド タイ |インド 中国  インド,ベトナム,タイ,中国 ※B列のデータを重複を除いて、C列に入れたいと思っています ※2行のデータを例にしましたが、実際には2万くらいデータがあります ※マクロは全くわからないので、多少の手作業があっても関数レベルで やれると助かります。(いまから、マクロを勉強してもよいでしょうか??) 良い方法をアドバイスいただければ助かります。

  • エクセル2007の[重複の削除]をエクセル2003でしたいです。

    列データーが10ほどあり、ある特定の列が2つや3つを条件に重複してる場合は削除をしたいです。 できればチェックボックスのようなものがあって、毎回違った特定列を条件にしたいです。 列データは減らせません。 マクロでやり方が解ればくめるかと思ったのですが特定の列を指定して、重複を探し削除するという方法が思いつきません。 エクセル2007の[重複の削除]という機能できるようですが、エクセル2003などで実現する方法はないでしょうか?

  • エクセルに貼った重複したデータの1つを削除する法

    エクセルに貼った重複したデータの片方を削除する法 エクセルに、お店の名前をたくさんはりつけてリストを作ったんですが、 かなりの数のURLが重複しています。 重複したものの片方をまとめて削除したいのですが、どのようにすれば いいでしょうか?

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

    エクセルの重複データを抽出し、最新のデータを残したいです。 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が残るようにしたいです。 膨大なデータの為、困っています。 良い方法をご存知の方、よろしくお願い致します。

  • 「エクセル」で重複したデータだけを呼び出したい。

    「Excel2000」を使用しています。 「重複しているデータだけ抽出する」 ということは出来るでしょうか? たとえば「A列」に名前が入っていて、 「B列」に住所、「C列」に電話番号が 入っているとします。 重複した名前だけを呼び出して、 なおかつ「B列」「C列」の データも表示させたいのですが…。

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

    こんにちわ。 エクセルでつぎのようなリストがあるとします。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

  • 重複データの削除

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

専門家に質問してみよう