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