循环遍历列的重复单元格,然后放入“-NUMBER”

时间:2011-10-05 13:19:11

标签: excel vba excel-formula

我有一个巨大的电子表格,在其中一个列中有SUPPOSED是唯一标识符。但问题是我的客户不理解“唯一性”要求的重要性。

所以我只是不想手动浏览7000行并重命名。我知道如何做循环,我知道如何突出重复单元格,但我不知道如何循环重复并在它们之后放一个计数器,所以如果我有:

duplicate
duplicate
duplicate

它会:

duplicate-1
duplicate-2
duplicate-3

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您可以在不诉诸VBA的情况下执行此操作。假设A列是半唯一的客户名称列(即有时客户出现不止一次,在这种情况下,您希望区分这些记录)。使用此计算并填写表格的长度:

  1. 在B列中,输入此内容并填写:=MATCH(A2,A:A,)
  2. 在C栏中,输入此内容并填写:=IF(B2=ROW(), 1, C1+1)
  3. 在D栏中,输入此内容并填写:=A2 & "-" & C2
  4. 它做了什么?

    1. B列告诉您每个客户的起始行。
    2. C列查看每个客户的起始行,并从1前进开始计算。
    3. D栏刚刚结合了A& D表示唯一标识符
    4. 你会得到类似下表的内容。之后,您可以使用Copy& PasteValue将计算转换为值,删除额外的列,然后就完成了。

      CustName    First   Counter Unique
      A           2       1       A-1
      B           3       1       B-1
      C           4       1       C-1
      C           4       2       C-2
      D           6       1       D-1
      E           7       1       E-1
      E           7       2       E-2
      E           7       3       E-3
      F           10      1       F-1
      

答案 1 :(得分:1)

如果您希望坚持使用VBA,可以使用Windows Scripting Runtime中的Dictionary object来帮助您。

首先,设置对Windows Scripting Runtime的引用:

Windows Scripting Runtime

然后,执行以下代码:

Option Explicit

Sub test()
    Dim uniqueCounter As New Scripting.Dictionary
    Dim counter As Long
    Dim rowCount As Long
    Dim identifer As String


    rowCount = 17 'Whatever code you want to put in to calculate the last row

    For counter = 1 To rowCount
        identifer = Sheet1.Cells(counter, 1) 'Put whatever number of combination of cells which the row unique here (maybe it's just the one)
        If uniqueCounter.Exists(identifer) Then
            uniqueCounter(identifer) = CLng(uniqueCounter(CStr(Sheet1.Cells(counter, 1)))) + 1
            Sheet1.Cells(counter, 2) = "Duplicate #" & uniqueCounter(CStr(Sheet1.Cells(counter, 1)))
        Else
            uniqueCounter.Add identifer, "0"
            Sheet1.Cells(counter, 2) = "Original"
        End If
    Next counter

End Sub

以上代码转换将处理以下数据:

1
2
3
1
1
1
3
2
1
1
2
3
12
15
3
4
15

并在列b中填写原件和重复计数,如下所示:

1   Original
2   Original
3   Original
1   Duplicate #1
1   Duplicate #2
1   Duplicate #3
3   Duplicate #1
2   Duplicate #1
1   Duplicate #4
1   Duplicate #5
2   Duplicate #2
3   Duplicate #2
12  Original
15  Original
3   Duplicate #3
4   Original
15  Duplicate #1

答案 2 :(得分:1)

无论顺序如何工作的单列公式是向下复制此公式(对于从A1开始的数据) =A1 &"-" &COUNTIF($A$1:A1,A1)

enter image description here