How can I count the number of different values (numbers and strings mixed) in a chosen (large) range in VBA?
I think about this in this way:
 1. Read in data into one dimensional array.
 2. Sort array (quick or merge sort) need to test which
 3. Simply count number of different values if sorted array : if(a[i]<>a[i+1]) then counter=counter+1.  
Is it the most efficient way to solve this problem?
Edit: I want to do it in Excel.
Here is a VBA Solution
You don't need an Array to get this done. You can also use a collection. Example
Sub Samples()
    Dim scol As New Collection
    With Sheets("Sheet1")
        For i = 1 To 100 '<~~ Assuming the range is from A1 to A100
            On Error Resume Next
            scol.Add .Range("A" & i).Value, Chr(34) & _
            .Range("A" & i).Value & Chr(34)
            On Error GoTo 0
        Next i
    End With
    Debug.Print scol.Count
    'For Each itm In scol
    '   Debug.Print itm
    'Next
End Sub
FOLLOWUP
Sub Samples()
    Dim scol As New Collection
    Dim MyAr As Variant
    With Sheets("Sheet1")
        '~~> Select your range in a column here
        MyAr = .Range("A1:A10").Value
        For i = 1 To UBound(MyAr)
            On Error Resume Next
            scol.Add MyAr(i, 1), Chr(34) & _
            MyAr(i, 1) & Chr(34)
            On Error GoTo 0
        Next i
    End With
    Debug.Print scol.Count
    'For Each itm In scol
    '   Debug.Print itm
    'Next
End Sub
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With