首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >合并与用户和每个单元格对应的重复单元格

合并与用户和每个单元格对应的重复单元格
EN

Stack Overflow用户
提问于 2016-05-13 08:48:31
回答 1查看 45关注 0票数 0

我有一个大约有50000行和大约1200列的工作表。每一行对应于用户,每个单元格是他购买的产品。我需要识别复制的产品并删除它。

代码语言:javascript
复制
  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..

代码语言:javascript
复制
  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行,则不进行响应。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-13 13:06:58

试试这个:

代码语言:javascript
复制
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

这是运行代码后得到的结果:

注意事项:在运行代码之前对数据进行备份。

@SiddharthRout和@DickKusleika的代码被引用为上面的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37205402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档