- ベストアンサー
エクセルの重複データ整理方法
- エクセル2000を使用して、製品名と生産個数を入力する生産管理において、重複したデータを自動的に整理する方法を教えてください。
- 重複したデータ(製品名)の場合、既存の製品の行の空白セルに生産個数を自動的に書き込んでデータを整理する方法を教えてください。
- エクセルの重複データの整理について、マクロやVBAを使用した方法などを教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
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 ファイルメニューから終了してエクセルに戻る マクロを実行する。 #まずご質問でご自分が掲示されたとおりにサンプルを作って寄せられたそれぞれの回答を実行し,キチンと出来ることを確認してから実地に使用するようにしてください。
その他の回答 (4)
- merlionXX
- ベストアンサー率48% (1930/4007)
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
お礼
有難うございました。 説明不足だったかもしれませんね。 後でグラフ作成するにあたって、同一セルにアンダーバーで区切る方法は 不向きだったようです。 merlionXXさんのコードを勉強し、集計シートの自動作成に チャレンジしてみたいと思います。
- nayuta_lot
- ベストアンサー率64% (133/205)
こんにちは 集計するだけでよいなら、簡単ですが 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 手作業ですが、そんなに手間でもありませんので、こうゆうやりかたもあるくらいに 参考にしてください。 それでは
お礼
他のデータファイルで試して見ます。 大変、有難うございました。
- merlionXX
- ベストアンサー率48% (1930/4007)
関数ではやたら面倒だと思いますので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)
シート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))))
お礼
大変参考になりました。 他の資料に使えそうです、大変有難うございました。
お礼
私が望んだ通りの方法です。 これで、作業が効率よく出来ると思います、 有難うございました。