La formula dovrebbe essere (se non mi si sono incrociati gli occhi):
- Codice: Seleziona tutto
=SE.ERRORE(INDICE($A$191:$BVK$191;PICCOLO(SE(CONFRONTA($A$191:$BVK$191;$A$191:$BVK$191;0)=RIF.RIGA(INDIRETTO("1:"&COLONNE($A$191:$BVK$191)));CONFRONTA($A$191:$BVK$191;$A$191:$BVK$191;0);"");RIF.RIGA(INDIRETTO("1:"&COLONNE($A$191:$BVK$191)))));"")
Tuttavia come tempi di esecuzione a me ci mette mooolti secondi; potrebbe allora essere utile ricorrere a una apposita "Funzione Utente" corrispondente a questo codice:
- Codice: Seleziona tutto
Function myUnici(ByRef myRan As Range) As Variant
Dim WArr, oArr(), oInd As Long
Dim myMatch, I As Long, J As Long
'
ReDim oArr(1 To myRan.Count)
'
WArr = myRan.Value
For I = 1 To UBound(WArr)
For J = 1 To UBound(WArr, 2)
If WArr(I, J) <> "" Then
myMatch = Application.Match(WArr(I, J), oArr, False)
If IsError(myMatch) Then
oInd = oInd + 1
oArr(oInd) = WArr(I, J)
End If
End If
Next J
Next I
ccnt = Application.Caller.Cells.Count
If ccnt < oInd And ccnt > 1 Then
oArr(ccnt) = "[.." & oInd - ccnt & "..]"
End If
If oInd < ccnt Then
ReDim Preserve oArr(1 To ccnt)
Else
ReDim Preserve oArr(1 To oInd)
End If
If Application.Caller.Rows.Count > 1 Then
myUnici = Application.WorksheetFunction.Transpose(oArr)
Else
myUnici = oArr
End If
End Function
Va messa in un modulo standard del vba; poi sul foglio excel potrai scrivere la formula
- Codice: Seleziona tutto
=myUnici(IntervalloDati)
La formula va messa in N celle sotto forma di formula a matrice
Se le celle previste non sono sufficienti per riportare tutti i contenuti, l'ultima cella riportera' la scritta
"[..N..]", dove N indica quanti valori non sono stati visualizzati (la formula va espansa di altre N-1 righe)
Ovviamente funziona (spero correttamente
) sia per con dati di origine in verticale che in orizzontale, e puo' riportare i risultati sia in verticale che in orizzontale (indipendentemente da come sono i dati di origine)
Spero sia di qualche utilita'
Ciao