2016-05-13 18 views
0

私は約50000行と約1200列のワークシートを持っています。各行はユーザーに対応し、各セルは購入した製品です。重複した製品を特定して削除する必要があります。ユーザーと各セルに対応する重複セルをマージする

A | B | C | D | E | F | G | H 
------|------|------|------|------|------|------|-------- 
user1 | pro1 | pro1 | pro2 | pro3 | pro4 | pro3 | pro2... 
user2 | pro1 | pro3 | pro1 | pro3 | pro2 | pro3 | pro2.. 
user3 | pro1 | pro3 | pro2 | pro3 | pro1 | pro3 | pro2.. 
user4 | pro1 | pro1 | pro2 | pro5 | pro3 | pro3 | pro2.. 

A | B | C | D | E | F | G | H 
------|------|------|------|------|------|------|------- 
user1 | pro1 | pro2 | pro3 | pro4 |  |  | 
user2 | pro1 | pro2 | pro3 |  |  |  | 
user3 | pro1 | pro2 | pro3 |  |  |  | 
user4 | pro1 | pro2 | pro3 | pro5 |  |  | 

に私はコードを試してみましたが、それは100行のために動作しますが、30000行のために、このお試しください

+1

お客様の[mcve]を表示して、問題解決の機会を得ることができるようにしてください。 – kayess

+0

これは無料のコード作成サービスではありませんのでご注意ください。しかし、私たちは、同僚のプログラマー(および志望者)を**その**コードで支援することを熱望しています。 [良い質問をするにはどうすればいいですか](http://stackoverflow.com/help/how-to-ask)のヘルプをもう一度読んでみてください。その後、達成したいタスクを完了するために、これまでに書いたVBAコードで質問を更新してください。 – Ralph

答えて

0

を応答していないに行くです:これは

Sub UniqueValsInRow() 
    Dim MyCol As New Collection 
    Dim ColItem 
    Dim CellVal As Variant 
    Dim LastRow As Long, LastColumn As Long, ColCount As Long 
    Dim vTemp As Variant 
    Dim i As Long, j As Long, r As Long, c As Long 
    Dim wsInput As Worksheet, wsOutput As Worksheet 

    Set wsInput = ActiveWorkbook.Sheets("Sheet1") '---> enter you sheet name here 
    LastRow = wsInput.Cells(Rows.Count, "A").End(xlUp).Row '---> will give no. of rows 

    For r = 1 To LastRow 
     LastColumn = wsInput.Cells(r, Columns.Count).End(xlToLeft).Column '---> will give no. of columns in each row 

     'add values to collection 
     For c = 2 To LastColumn 
      CellVal = wsInput.Cells(r, c).Value 
      On Error Resume Next 
      MyCol.Add CellVal, Chr(34) & CellVal & Chr(34) 
      On Error GoTo 0 
     Next c 

     'sort items in collection 
     For i = 1 To MyCol.Count - 1 
      For j = i + 1 To MyCol.Count 
       If MyCol(i) > MyCol(j) Then 
        vTemp = MyCol(j) 
        MyCol.Remove j 
        MyCol.Add vTemp, vTemp, i 
       End If 
      Next j 
     Next i 

     'delete row data 
     wsInput.Range(Cells(r, 2), Cells(r, LastColumn)).ClearContents 

     'enter unique sorted items from collection to row 
     ColCount = 2 
     For Each ColItem In MyCol 
      wsInput.Cells(r, ColCount).Value = ColItem 
      ColCount = ColCount + 1 
     Next 

     Set MyCol = New Collection 
    Next r 
End Sub 

を結果私はコードを実行した後に得ます:

enter image description here

enter image description here

:コードを実行する前にデータのバックアップを取ります。

@ SiddharthRoutと@ DickKusleikaのコードは、上記のコードを記述するために参照されています。

+0

コードは、その行のすべてのセルではなく、隣接する列の次のセルを比較するように見えます。 pro1、pro3、pro1の代わりにpro1、pro3、pro1が来るようになりました。 – Karthik

+0

@Karthik - イメージを追加しました。コードはうまく動作します。ファイルを共有することができれば、私はそれを調べることができます。 – Mrig

+0

@ Mrig-遅延のために死にます。コードは正常に動作しています。ありがとう。 – Karthik

関連する問題