2014-05-01 2 views
0

범위의 각 고유 문자열 값에 대해 고유 ID를 작성하는 함수 (UDF)가 있습니다. 내 문제는 내가 찾은 전나무 발생 행 번호를 사용하고 있습니다. 내가 필요합니다 : 각 고유 값에 대해 하나씩 증가하는 고유 한 ID입니다. (가) 열 B 열 2에 다음 수식 내가 사용하고범위의 각 고유 값에 대한 고유 한 증가 ID

enter image description here

을 :

=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

행 번호를 사용하는 대신 할당 된 마지막 ID를 추적하고 e 이미 ID가 할당되지 않은 텍스트를 찾습니다. –

답변

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) 
+0

감사합니다. 그러나 여전히 VBA 솔루션을 원합니다 – user1783736

+0

@ user1783736 VBA 솔루션을 추가했습니다. – tigeravatar

+0

이 완벽하게 작동합니다. 두 가지 솔루션에 대한 감사의 말 – user1783736