串行中的唯一条目

时间:2017-03-05 09:01:00

标签: excel excel-vba visual-studio-macros vba

嗨我有Header'SHOE'的特定列,其中包含重复的数字~50000我希望相邻的列具有每个唯一编号的序列号。可能存在在整列中多次出现相同SHOE编号的情况。

如果存在SHOE列,则只应运行其他宏。

enter image description here

任何人都可以帮助使用宏吗?

3 个答案:

答案 0 :(得分:0)

您需要额外的列。 在E2写

=MATCH(D2,D:D,0)

查找每个SHOE的第一个实例

然后在新专栏(F2)中写:

=SUMPRODUCT(--(E2>$E$2:$E2),1/COUNTIF($E$2:$E2,$E$2:$E2))+1

这将为您提供所需的序列号。

答案 1 :(得分:0)

这是VBA解决方案:

Sub SHOP_Serial()
Dim mtc As Long

On Error Resume Next

For i = 2 To ActiveSheet.Range("D65536").End(xlUp).Row
mtc = 0
mtc = WorksheetFunction.Match(Range("D" & i), Range("D1:D" & i), 0)
    If Cells(mtc, "E").Value = 0 Then
        Cells(i, "E").Value = WorksheetFunction.Max(Range("E1:E" & i - 1)) + 1
    Else
        Cells(i, "E").Value = Cells(mtc, "E").Value
    End If

Next i

End Sub

答案 2 :(得分:0)

这将根据带有SHOE标题的列中的数据将结果放入FIRST EMPTY COLUM:

Sub SHOE_Serial()
Dim mtc As Long
Dim shoe As Long
Dim LastColumn As Long

On Error Resume Next

LastColumn = ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column + 1
shoe = WorksheetFunction.Match("SHOE", Range("A1:IV1"), 0)

For i = 2 To ActiveSheet.Cells(65536, shoe).End(xlUp).Row
mtc = 0
mtc = WorksheetFunction.Match(Cells(i, shoe), Range("A1:A" & i).Offset(, shoe - 1), 0)
    If Cells(mtc, LastColumn).Value = 0 Then
        Cells(i, LastColumn).Value = WorksheetFunction.Max(Range("A1:A" & i).Offset(, LastColumn - 1)) + 1
    Else
        Cells(i, LastColumn).Value = Cells(mtc, LastColumn).Value
    End If

Next i

End Sub