2017-04-10 5 views
0

컬렉션을 만들고 해당 컬렉션에서 고유 값 수를 가져 오는 중 컬렉션 자체를 작성하는 중 오류가 발생합니다. 누구든지 내가 잘못 가고있는 곳을 나에게 제안 할 수 있습니까? 친절하게 생각을 나누십시오. UNIQUE VALUES의 COUNT를 찾는 방법을 알려 주시기 바랍니다.Excel VBA - 컬렉션 오류

Sub trial() 

Dim sampleVisualBasicColl As Collection 

For i = 2 To 10 

    Rng = Range("M" & i).value 

    StartsWith = Left(Rng, 3) 

    If StartsWith = "Joh" Then 

      sampleVisualBasicColl.Add Rng 

    Else 

    End If 

Next 

Debug.Print (sampleVisualBasicCol1) 

End Sub 
+0

그냥 눈치 채 셨습니다 - 어제 물어 본 것의 거의 복제본이 아닙니까? http://stackoverflow.com/questions/43314311/excel-vba-formula-counting-unique-value-error –

답변

1

코드 내에서보다는 Range 내가 Cells을 사용하고 있습니다 :

'Using a dictionary. 
Sub Dic_Test() 

    Dim dict As Object 
    Dim i As Long 
    Dim sValue As String 
    Dim key As Variant 

    Set dict = CreateObject("Scripting.Dictionary") 

    With ThisWorkbook.Worksheets("Sheet1") 
     For i = 2 To 20 
      If Len(.Cells(i, 13)) >= 3 Then 
       sValue = Left(.Cells(i, 13), 3) 
       If dict.exists(sValue) Then 
        dict(sValue) = dict(sValue) + 1 
       Else 
        dict(sValue) = 1 
       End If 
      End If 
     Next i 
    End With 

    For Each key In dict.keys 
     Debug.Print key & " = " & dict(key) 
    Next key 

End Sub 

참고 : 사전을 사용합니다. Cells(2,13)은 M2 (13 번째 열, 2 번째 행)입니다.

나는이 사전에 매우 도움이 링크를 찾을 수

: 여기에 귀하의 질문에 준 목록을 사용하여 추가 업데이트로 https://excelmacromastery.com/vba-dictionary/

(는 대답은를 접수 한 후)를 실행 한 다음, Excel VBA - Formula Counting Unique Value error은 사전에이 코드를 반환합니다 Joh = 4, Ian = 3

'Using a dictionary. 
Sub Dic_Test() 

    Dim dict As Object 
    Dim dictFinal As Object 
    Dim i As Long 
    Dim sValue As String 
    Dim key As Variant 
    Dim keyFinal As String 

    Set dict = CreateObject("Scripting.Dictionary") 
    Set dictFinal = CreateObject("Scripting.Dictionary") 

    'Get the unique values from the worksheet. 
    With ThisWorkbook.Worksheets("Sheet1") 
     For i = 2 To 20 
      If Len(.Cells(i, 13)) >= 3 Then 
       sValue = .Cells(i, 13).Value 
       If dict.exists(sValue) Then 
        dict(sValue) = dict(sValue) + 1 
       Else 
        dict(sValue) = 1 
       End If 
      End If 
     Next i 
    End With 

    'Count the unique values in dict. 
    For Each key In dict.keys 
     keyFinal = Left(key, 3) 
     If dictFinal.exists(keyFinal) Then 
      dictFinal(keyFinal) = dictFinal(keyFinal) + 1 
     Else 
      dictFinal(keyFinal) = 1 
     End If 
    Next key 

    For Each key In dictFinal.keys 
     Debug.Print key & " = " & dictFinal(key) 
    Next key 

End Sub 
+0

@Dareen Bartup-Cook 손에 감사드립니다. 그러나 나는 Unique Counts를 찾고 있습니다. 백작님이 아니야. 혼자만의 존. JohnRed, JohnRed, JohnBlue, JohnGreen을 말하면 John의 Unique는 3입니다. – Sid29

+0

아, 그래 .... 그래서 JohnRed는 1로 간주됩니다. "Joh"를 카운트하지만 정확한 중복을 결합하십시오. –

+0

예. 그게 내가 맞았다는거야. 정확한 복제본을 결합하는 방법은 무엇입니까? 또는 프로그래밍 방식으로 중복을 삭제하려면 – Sid29

1

콜렉션을 작성하고 선언해야합니다.

Sub trial() 

Dim myCol As Collection 

Set myCol= New Collection ' creates the collection 

For i = 2 To 10 

    Rng = Range("M" & i).value 

    StartsWith = Left(Rng, 3) 

    If StartsWith = "Joh" Then 

      myCol.Add Rng 

    Else 

    End If 

Next 

For each x in myCol 
    Debug.Print x 
Next x 

End Sub 
+0

아니요,이 컬렉션을 가져 오지 않습니다. Debug.Print는 나에게 빈 결과를 제공합니다 – Sid29

+0

그런 컬렉션을 인쇄 할 수없는 경우, 인쇄 할 색인을 지정해야합니다. 다른 사람에게는 어떤 이유로 컬렉션의 이름이 마음에 들지 않았습니다. 위의 수정 된 코드를 테스트하고 테스트 해보십시오. – Absinthe

-1

당신은 선언하지 않은 변수 RNG & 내가이가 할 수있는 가장 중요한 일이다. 한편,이 공식을 제안하고 싶습니다.

= (Frequency (if (Len : B2 : B20)> 0, Match (B2 : B20, B2 : B20, 0), ") if

해당 배열 수식은 Ctrl + Shift + Enter로 끝납니다. 당신이 하나를 사용할 수 있습니다

,

하위 COUNTUNIQUE() 수있는 경우는 false = 정수로 J = 1의 경우 I = 1로 470 플래그를 계산, 난 희미한 계산

(1) 다음의 경우 j = 1 계산하려면 Sheet1.Cells (i, 3) .Value = Sheet1.Cells (j, 11) .Value then 플래그 = True End If 다음 j Else 플래그 = False End if If 플래그 = False Then Sheet1. 셀 (count, 11) .Value = Sheet1.Cells (i, 3). 값 개수 = count + 1 End IfNext i Sheet1.Cells (1, 15) .Value = count End Sub

당신이 (당신이 다른 어떤 요, 벤 ...) 각 항목의 수를 원하는 경우

'Using a collection 
Sub Col_test() 

    Dim cCol As Collection 
    Dim i As Long 

    Set cCol = New Collection 

    On Error GoTo Err_Handler 

    With ThisWorkbook.Worksheets("Sheet1") 
     For i = 2 To 20 
      If Left(.Cells(i, 13), 3) = "Joh" Then 
       cCol.Add .Cells(i, 13).Value, .Cells(i, 13).Value 
      End If 
     Next i 
    End With 

    Debug.Print cCol.Count 

    On Error GoTo 0 

Exit Sub 
Err_Handler: 
    Select Case Err.Number 
     Case 457 'This key is already associated with an element of this collection 
      Err.Clear 
      Resume Next 
     Case Else 
      MsgBox "Error " & Err.Number & vbCr & _ 
       " (" & Err.Description & ") in procedure Col_test." 
      Err.Clear 
    End Select 

End Sub 

: 당신은 그냥 컬렉션에 요를 추가 한 다음 항목을 믿을 수있는 컬렉션을 사용

+0

아니요, 당신이 "Joh"로 시작하는 조건을 추가하지 않았기 때문에 이것이 작동하지 않을 것이라고 생각합니다. – Sid29

+0

죄송합니다. 그건 내 잘못이었습니다. 기준을 알아 채지 못했지만 곧 수식을 사용했습니다. 나는 해결책을 얻을 수있을 것이다. –

0

이 목록 상자에 고유 한 값을 수집 이후 이봐,이 코드는 U 도움이 될 것입니다 ,,

Priva 테 서브 UserForm_Initialize() 희미한 cUnique 워크 시트 희미한 vNum으로 범위 희미한 쉬 모음으로 희미한 RNG로 범위 희미한 세포로 변형

설정 SH = ThisWorkbook.Sheets ("Sheet1의") 설정 RNG = SH으로 .Range ("A2", sh.Range ("A2"). 값 = "John".끝 (xlDown))

설정 cUnique은 = 새 컬렉션 오류에

Rng.Cells의 각 셀 cUnique.Add Cell.Value,에서는 CStr (Cell.Value) 다음 전지를 들어 다음

를 다시 시작

cUnique에서 각 vNum에 대한 오류 고토 0

Me.ListBox1.AddItem vNum

,

다음 vNum End Sub

+0

'Set Rng = sh.Range ("A2", sh.Range ("A2") .Value = "John"End (xlDown))'컴파일되지 않습니다. –