costruzione sull'idea presentata da i_saw_drones, vi raccomando vivamente il Scripting.Dictionary
. Tuttavia, questo può essere fatto senza On Error Resume Next
come mostrato di seguito. Inoltre, il suo esempio richiede il collegamento della libreria Microsoft Scripting Runtime
. Il mio esempio dimostrerà come farlo senza dover fare alcun collegamento.
Inoltre, poiché si sta facendo questo in Excel, non è necessario creare l'array nel passaggio 1. La funzione seguente accetterà un intervallo di celle, che verrà completamente iterato.
(cioè UniqueCount = UniqueEntryCount(ActiveSheet.Cells)
o UniqueCount = UniqueEntryCount(MySheet.Range("A1:D100")
)
Function UniqueEntryCount(SourceRange As Range) As Long
Dim MyDataset As Variant
Dim MyRow As Variant
Dim MyCell As Variant
Dim dic As Object
Dim l1 As Long, l2 As Long
Set dic = CreateObject("Scripting.Dictionary")
MyDataset = SourceRange
For l1 = 1 To UBound(MyDataset)
' There is no function to get the UBound of the 2nd dimension
' of an array (that I'm aware of), so use this division to
' get this value. This does not work for >=3 dimensions!
For l2 = 1 To SourceRange.Count/UBound(MyDataset)
If Not dic.Exists(MyDataset(l1, l2)) Then
dic.Add MyDataset(l1, l2), MyDataset(l1, l2)
End If
Next l2
Next l1
UniqueEntryCount = dic.Count
Set dic = Nothing
End Function
Potrebbe anche essere importante notare che quanto sopra conterà una stringa nulla ""
come un valore distinto. Se non si desidera che questo sia il caso, è sufficiente modificare il codice a questo:
For l1 = 1 To UBound(MyDataset)
For l2 = 1 To SourceRange.Count/UBound(MyDataset)
If Not dic.Exists(MyDataset(l1, l2)) And MyDataset(l1, l2) <> "" Then
dic.Add MyDataset(l1, l2), MyDataset(l1, l2)
End If
Next l2
Next l1
è possibile caricare la gamma in una matrice 2D, quindi ciclo anche se e utilizzare un dizionario di script per verificare la presenza di unicità. Il dizionario ha il tuo conteggio quando hai finito. –
@TimWilliams mi hai battuto su di esso, esattamente il mio pensiero :) –
Tre risposte - carino le controllerò e ne scelgo una al venerdì. Grazie a – Qbik