2013-09-03 3 views
0

숫자 ID 목록이있는 요구 사항을 처리하고 있습니다. ID의 형식은 다음과 같습니다.숫자 목록이있는 번호 검색

3131010301 : 처음 6 개는 관리자에게 할당되고 나머지 4 개 숫자는 팀 동료에게 할당됩니다. 각 팀 구성원은 관리자 ID의 접두사가있는 ID를 가지며 팀 구성원마다 마지막 4 자리 숫자 만 변경됩니다.

필자는 관리자 ID를 기반으로 ID를 식별하고 팀 정보를 모두 대조해야합니다. 이것은 검색 할 거대한 데이터 세트가 될 것입니다.

숫자에 사용할 수있는 INSTR의 줄에 무엇이 있습니까?

귀하의 의견을 이해하고 명확하지 않은 경우 알려주십시오.

+0

VBA's'INSTR' 숫자와 함께 작동 하는가를 실행하는 스프레드 시트를 설정합니다. Excel에서 적절한 경우 'MID', 'SEARCH'등은 숫자로 작업합니다. –

답변

1

스프레드 시트를 가정하면 나는 2 개의 다른 열

enter image description here

열 B는 첫 6을 가지고에 관리자와 회원 ID를 분리하는 코드를 작성이

enter image description here

처럼 보인다 숫자 - 관리자 ID라고 말한 것 같습니다.

열 C는 전자 4 자리 팀원 ID

그래서, 첫 번째 사진과 같이 다음 코드

Option Explicit 

Sub ManagersAndTheirTeams() 
Application.ScreenUpdating = False 
    ReDim arr(Range("A" & Rows.Count).End(xlUp).Row - 1) As String 

    Dim r As Range 
    Dim i As Long, j As Long, c As Long 
    For i = 1 To Range("A" & Rows.Count).End(xlUp).Row 
     Set r = Range("A" & i) 
     arr(i - 1) = r 
     Set r = Nothing 
    Next i 

    RemoveDuplicate arr 

    Columns("B:C").NumberFormat = "@" 

    For i = LBound(arr) To UBound(arr) 
     For j = 1 To Range("A" & Rows.Count).End(xlUp).Row 
      Set r = Range("A" & j) 
      If StrComp(Left(arr(i), 6), Left(r, 6), vbTextCompare) = 0 Then 
       Range("B" & j) = Left(arr(i), 6) 
       Range("C" & j) = Right(r, 4) 
      End If 
      Set r = Nothing 
     Next j 
    Next i 

    For i = LBound(arr) To UBound(arr) 
     For j = 1 To Range("B" & Rows.Count).End(xlUp).Row 
      Set r = Range("B" & j) 
      If StrComp(Left(arr(i), 6), r, vbTextCompare) = 0 Then 
       c = c + 1 
       If c > 1 Then 
        r.ClearContents 
       End If 
      End If 
      Set r = Nothing 
     Next j 
     c = 0 
    Next i 

Application.ScreenUpdating = True 
End Sub 

Sub RemoveDuplicate(ByRef StringArray() As String) 
    Dim lowBound$, UpBound&, A&, B&, cur&, tempArray() As String 
    If (Not StringArray) = True Then Exit Sub 
    lowBound = LBound(StringArray): UpBound = UBound(StringArray) 
    ReDim tempArray(lowBound To UpBound) 
    cur = lowBound: tempArray(cur) = StringArray(lowBound) 
    For A = lowBound + 1 To UpBound 
     For B = lowBound To cur 
      If LenB(tempArray(B)) = LenB(StringArray(A)) Then 
       If InStrB(1, StringArray(A), tempArray(B), vbBinaryCompare) = 1 Then Exit For 
      End If 
     Next B 
     If B > cur Then cur = B: tempArray(cur) = StringArray(A) 
    Next A 
    ReDim Preserve tempArray(lowBound To cur): StringArray = tempArray 
End Sub