范围中每个不同值的唯一增量ID

时间:2014-05-01 00:02:16

标签: excel-vba vba excel

我有一个函数(UDF),它为一个范围内的每个不同的String值创建一个唯一的id。我的问题是我正在使用行号找到第一次出现的事件。我需要: 一个唯一的ID,每个不同的值递增1。请查看我当前值的图像以及我想要的实际值:

enter image description here

我在B栏第2行使用以下公式:

 =insert_id1(A2,$A$2:$A$8)

以下是我的UDF:

Function insert_id1(Search_string As String, Search_in_col As Range)
Dim i As Long
Dim result As Integer
result = 0

For i = 1 To Search_in_col.count

  If Search_in_col.Cells(i, 1) = Search_string Then
        If result = 0 Or result > Search_in_col.Cells(i, 1).Row Then
        result = Search_in_col.Cells(i, 1).Row
        End If
  End If

Next
insert_id1 = result
End Function

1 个答案:

答案 0 :(得分:1)

它必须是VBA吗?在单元格B2中使用此公式并复制:

=IF(COUNTIF(A$1:A1, A2)=0,MAX(B$1:B1)+1,VLOOKUP(A2,A$1:B1,2,FALSE))

修改

如果真的需要VBA / UDF:

Public Function insert_id1(Search_string As String, Search_in_col As Range) As Long

    Dim i As Long
    Dim sUnq As String
    Dim cel As Range

    For Each cel In Search_in_col
        If Len(cel.Text) > 0 _
        And InStr(1, "|" & sUnq & "|", "|" & cel.Text & "|", vbTextCompare) = 0 Then
            i = i + 1
            sUnq = sUnq & "|" & cel.Text
            If cel.Text = Search_string Then
                insert_id1 = i
                Exit Function
            End If
        End If
    Next cel

End Function

然后公式变为:

=insert_id1(A2,$A$2:$A$8)