Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 循环遍历列的重复单元格,并放置一个-“数字”;之后_Excel_Vba_Excel Formula - Fatal编程技术网

Excel 循环遍历列的重复单元格,并放置一个-“数字”;之后

Excel 循环遍历列的重复单元格,并放置一个-“数字”;之后,excel,vba,excel-formula,Excel,Vba,Excel Formula,我有一个巨大的电子表格,其中一列应该有一个唯一的标识符。但问题是我的客户不理解“独特性”要求的重要性 所以我只是不想手动浏览7000行并重命名它们。我知道如何循环,我知道如何突出显示重复的单元格,但我不知道如何循环重复的单元格并在其后面放置计数器,因此如果我有: duplicate duplicate duplicate 它将使: duplicate-1 duplicate-2 duplicate-3 如何执行此操作?无需借助VBA即可执行此操作。假设A列是客户名称的半唯一列(即,有时客户出

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

所以我只是不想手动浏览7000行并重命名它们。我知道如何循环,我知道如何突出显示重复的单元格,但我不知道如何循环重复的单元格并在其后面放置计数器,因此如果我有:

duplicate
duplicate
duplicate
它将使:

duplicate-1
duplicate-2
duplicate-3

如何执行此操作?

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

  • 在B列中,输入并填写:
    =MATCH(A2,A:A,)
  • 在C列中,输入并填写:
    =IF(B2=ROW(),1,C1+1)
  • 在D列中,输入并填写:
    =A2&“-”&C2
  • 它有什么作用

  • 列B告诉您每个客户的起始行
  • 列C查看每个客户的起始行,并从1开始计数
  • 列D只是将A和D组合为唯一标识符
  • 你会得到类似下表的东西。之后,您可以复制并粘贴value以将计算转换为值,删除额外的列,就完成了

    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
    

    如果希望继续使用VBA,可以使用Windows脚本运行时中的帮助

    首先,设置对Windows脚本运行时的引用:

    然后,执行如下代码:

    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
    

    一个不考虑顺序的单列公式是复制下来的公式(对于从A1开始的数据)
    =A1&“-”和COUNTIF($A$1:A1,A1)


    我测试了这个,当我计算出
    $
    位置后,它就如广告所说的那样工作了。顺序不重要,仍然不需要VBA,而且我的建议更简单。