エクセルの重複データ整理方法

このQ&Aのポイント
  • エクセル2000を使用して、製品名と生産個数を入力する生産管理において、重複したデータを自動的に整理する方法を教えてください。
  • 重複したデータ(製品名)の場合、既存の製品の行の空白セルに生産個数を自動的に書き込んでデータを整理する方法を教えてください。
  • エクセルの重複データの整理について、マクロやVBAを使用した方法などを教えてください。
回答を見る
  • ベストアンサー

エクセルの重複データを整理する方法

  毎日の生産管理でエクセル2000を使用しています。 A列に製品名、B列に生産個数というように入力。 重複したデータが日替わりのように発生していますので、 あとでデータ整理するのが大変です。    A    B    C    D   ・・・・ 1 A製品  200 2 B製品  200 3 C製品  250 4 A製品  100 5 D製品  300 6 E製品  120 7 C製品  600 8 B製品   50 ・ 教えて!欲しいのは下記のように重複したデータ(製品名)の場合、 既存の製品の行の空白セルに生産個数を自動的に書き込み、整理する方法。    A    B    C    D ・・・・ 1 A製品  200  100 2 B製品  200  50 3 C製品  250  600 4 D製品  300   5 E製品  120   6  7  8 ・ いろいろ「エクセル 重複データ」に関する質問を検索したのですが、 これに当てはまる質問を見つけられず、意を決して投稿しました。 マクロ、VBAでも構いませんので、どうかご教授願います。 

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

ALT+F11を押す 挿入メニューから標準モジュールを挿入する 挿入したシートに下記をコピー貼り付ける sub macro1()  dim i,r  i = 1  do until cells(i, "A") = ""   r = application.match(cells(i, "A"), range("A:A"),0)   if i <> r then    cells(r, "IV").end(xltoleft).offset(0, 1) = cells(i, "B")    cells(i, "A").entirerow.delete shift:=xlshiftup   else    i = i + 1   end if  loop end sub ファイルメニューから終了してエクセルに戻る マクロを実行する。 #まずご質問でご自分が掲示されたとおりにサンプルを作って寄せられたそれぞれの回答を実行し,キチンと出来ることを確認してから実地に使用するようにしてください。

daichan88
質問者

お礼

私が望んだ通りの方法です。 これで、作業が効率よく出来ると思います、 有難うございました。

その他の回答 (4)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.5

ANo3です。 コードの貼り付けミスがありました。 差し替えてください。 Sub TEST01()   Dim myDic As Object '変数宣言   Dim c As Range '変数宣言   Dim ns As Worksheet '変数宣言   Set myDic = CreateObject("Scripting.Dictionary") 'myDicを用意   For Each c In Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp)) 'A列の各データについて     If Not myDic.exists(c.Value) Then 'myDicになければ       myDic.Add c.Value, c.Offset(0, 1).Value '追加しB列データを結びつける     Else 'myDicにあれば       myDic(c.Value) = myDic(c.Value) & "_" & c.Offset(0, 1).Value '"_" でつないでB列データを結びつける     End If   Next c '繰り返し   Set ns = Worksheets.Add(After:=ActiveSheet) 'シートを追加   With ns '追加したシートで     .Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys) 'A列にデータ     .Range("B1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Items) 'B列に結びつけデータ     .Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, OtherChar:="_" 'B列データを"_"で分解   End With   Set myDic = Nothing   Set ns = Nothing End Sub

daichan88
質問者

お礼

有難うございました。 説明不足だったかもしれませんね。 後でグラフ作成するにあたって、同一セルにアンダーバーで区切る方法は 不向きだったようです。 merlionXXさんのコードを勉強し、集計シートの自動作成に チャレンジしてみたいと思います。

回答No.4

こんにちは 集計するだけでよいなら、簡単ですが 1.Sheet1のA1からA8(最終行)までコピーします。 2.Sheet2のA1にペーストします。 3.ペーストの後、範囲指定されたままの状態でメニューのデータから『重複を削除』をクリック   します。 4.Sheet2のB1に 『=SUMIF(Sheet1!$A:$A,A1,Sheet1!$B:$B)』   と入力して、A列の最終行と同じ行まで、B1をコピー&ペーストします。 6.4まで一回やっておけば、あとは、データが増えるたびに1から3までを繰り返して   A列の最終行が増えたら、B1も同じ行までコピーすればOKです。   SUMIF関数の参考URL     ↓↓↓   http://kokoro.kir.jp/excel/sumif.html 手作業ですが、そんなに手間でもありませんので、こうゆうやりかたもあるくらいに 参考にしてください。 それでは

daichan88
質問者

お礼

他のデータファイルで試して見ます。 大変、有難うございました。

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.3

関数ではやたら面倒だと思いますのでVBAでの方法です。 VBAの使い方はご存知なのですね? 標準モジュールに以下をコピペして、データがあるシートをアクティブな状態(選択した状態)にしてからTEST01を実行してください。 新たにシートを追加して、そのシートに自動的に展開します。 Sub TEST01()   Dim myDic As Object '変数宣言   Dim c As Range '変数宣言   Dim ns As Worksheet '変数宣言   Set myDic = CreateObject("Scripting.Dictionary") 'myDicを用意   For Each c In Range(Cells(1, "A"), Cells(Rows.Count, "A").End(xlUp)) 'A列の各データについて     If Not myDic.exists(c.Value) Then 'myDicになければ       myDic.Add c.Value, c.Offset(0, 1).Value '追加しB列データを結びつける     Else 'myDicにあれば       myDic(c.Value) = myDic(c.Value) & " " & c.Offset(0, 1).Value '" " でつないでB列データを結びつける     End If   Next c '繰り返し   Set ns = Worksheets.Add(After:=ActiveSheet) 'シートを追加   With ns '追加したシートで     .Range("A1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Keys) 'A列にデータ     .Range("B1").Resize(myDic.Count, 1).Value = Application.Transpose(myDic.Items) 'B列に結びつけデータ     .Columns("B:B").TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, OtherChar:=" " 'B列データを" "で分解   End With   Set myDic = Nothing   Set ns = Nothing End Sub

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

シート1のA列およびB列の1行目からお示しのデータがあるとして、作業列をC列に設け、C1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",A1&COUNTIF(A$1:A1,A1)) シート2にお求めの表を作成するとしてA1セルから下方には製品名を入力します。 B1セルには次の式を入力して右横方向にオートフィルドラッグしたのちに下方向にもオートフィルドラッグします。 =IF($A1="","",IF(COUNTIF(Sheet1!$C:$C,$A1&COLUMN(A1))=0,"",INDEX(Sheet1!$B:$B,MATCH($A1&COLUMN(A1),Sheet1!$C:$C,0))))

daichan88
質問者

お礼

大変参考になりました。 他の資料に使えそうです、大変有難うございました。

関連するQ&A

  • 重複するデータの抽出について(エクセル)

    エクセル2003にて重複するデータの取り出しをしたいのですが、 わからないので教えてください。 例えば   A列   B列   C列    D列    E列・・・ 1  色  1回目  2回目  3回目   4回目 2  赤   あ    a      A       0 3  白   い    b      B       1 4  黄   う    c      C       2 5  黄   え    d      D       3 6  黒   お    e      E       4 7  赤   か    f      F       5 : このデータの中から、別のシートのA1に 赤と入力したら、B1にD列のA・Fを抽出 黄と入力したら、B1にD列のC・Dを抽出をしたいです。 VLOOKUP関数を使用してみたのですが、 赤と入力すると、D列のA(1番上のデータ)のみしか抽出出来ず、Fが抽出されません。 重複するデータがあるのはA列のみで、D列には重複するデータはありません。 わかりにくい文章ですみませんが、よろしくお願いします。

  • 【エクセル】重複データ抽出時にうまくいかない

    エクセル2003で、[データ]→[フィルタ]→[フィルタオプションの設定]で下記のように 設定して重複データを省きました、 ・「指定した範囲」にチェック ・「リスト範囲」に$A$1:$A$13を入力。 ・「抽出範囲」に$B$1を入力 ・「重複するレコードは無視する」にチェック の条件で実行すると。 [元データ]  A列 1 a 2 a 3 b 4 b 5 c 6 c 7 c 8 d 9 d 10 d 11 e 12 e 13 e が [フィルタ実行後]  A列  B列 1 a  a 2 a  a 3 b  b 4 b  c 5 c  d 6 c  e 7 c 8 d 9 d 10 d 11 e 12 e 13 e の様にB列でaが2つ出てしまいます。 なにが原因でしょうか?

  • Excel 重複データーのカウント

    Excelの関数に対する質問です。   =COUNTIF(A1:E1,A1) はA1と重複するデータを求めますが、この方法ではなく A B C D E 0 A A B C D 1 A A B C C 2 このように 行に重複するデータのデータ件数をいっきに求められる関数があるのでしょうか? それともそれぞれのデータを=COUNTIF(A1:E1,A1)~でそれぞれもとめた後、それを合計しなければならないのでしょうか? よろしくお願いします。

  • Excelの重複列の削除について

    Excelの重複列の削除について質問があります。 下記のような場合、B、E列を削除しA、C、D列を残したいのですが ご教授いただけないでしょうか? 宜しくお願いします。 A 123 → A 123 B 123   C 456 C 456   D 789 D 789 E 789

  • EXCELで2つのファイルから重複データで抜き出したいです。

    EXCELで2つのファイルから重複データで抜き出したいです。 『A』ファイルという顧客データと『B』ファイルという顧客データがあります。 それぞれ項目は同じで、 A列=顧客コード B列=顧客名 C列=住所   ・   ・   ・ となっています。 『A』ファイルと『B』ファイルそれぞれのファイルには顧客コードに重複はありません。 『A』ファイルと『B』ファイルを比べて 重複データ以外のダブリのないファイルを作成したいです。 よろしくお願いします。

  • 重複したデータを動かさずに並び替えを行う方法

    是非、教えてください。 Excel2000を使用しています。 データベースに重複したデータが存在しているのですが、 作業の都合上、特定の行(B行やC行)を基準にし、 重複しているデータがありその関係を維持したい列(3・4列)の データを固定したまま並び替えを行いたいと考えています。 ところが、普通に並び替えをしてしまうと、 3・4列にあったデータが離ればなれになってしまい困っています。 また優先されるキー等も活用しましたが上手くいきませんでした。 なにか良い方法はあるのでしょうか? 具体例(Cを基準に並び替え)    A    B   C 1  ID  項目1 項目2 2  11   A    c 3  12   B    d ※ 4  12   C    b ※ 5  13   D    a 6  14   B    c ↓ このようにしたいです。    A    B   C 1  ID  項目1 項目2 2  13   D    a 3  12   C    b ※ 4  12   B    d ※ 離ればなれにならない! 5  11   A    c 6  14   B    c 分かりにくい文章で恐縮ですが、 どうぞよろしくお願いします。

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

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

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

    単純なデータなのですが、重複している行が結構あります。同じデータは1行だけを残し、あとは削除して整理したいのですが、適切な方法が分かりません。 3000行にも上るデータなので、一つずつチェックするのも難しいですし、間違ってしまいそうです。 例えば下記のようなデータです。 取引先 売上件数 売上高(万円) A社   20   300 B社   15   250 C社   10   180 A社   20   300      ・      ・      ・ 上記の例で言うと、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列で"重複"でフィルタリングし、フィルタされた行の削除 スマートではないですが、私の知識では精一杯です。 何かスマートな方法はないものでしょうか? よろしくお願いいたします。

  • エクセルで2列のデータを1列にする方法について質問です

    エクセルで2列のデータを1列にする方法について質問です エクセルで2列のデータを1列のデータにするときに A B 1 a 2 b 3 c   4 d 5 e ↓ A B a 1 b 2 c 3 d 4 e 5 となるようにするにはどうすればいいでしょうか?

専門家に質問してみよう