Condividi:        

Formula in formato matrice : eliminare numeri doppi su riga

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Formula in formato matrice : eliminare numeri doppi su riga

Postdi nelson1331 » 11/04/22 14:47

Ho il sistema operativo Windows10.
Excel 2010.
Questa a seguire e' la formula in formato matrice, che uso abitualmente per eliminare numeri doppi, in verticale :
=SE.ERRORE(INDICE($A$196:$A$2130;PICCOLO(SE(CONFRONTA($A196:$A2130;$A196:$A2130;0)=RIF.RIGA(INDIRETTO("1:"&RIGHE($A196:$A2130)));CONFRONTA($A196:$A2130;$A196:$A2130;0);"");RIF.RIGA(INDIRETTO("1:"&RIGHE($A196:$A2130)))));"")
Se invece ho una sequenza di numeri su una riga, che sono collocati dalla cella A191 fino a BVK191 e non vi sono ne' lettere, ne' spazi vuoti interposti, quale formula in formato matrice, dovro' utilizzare ?
Desidero scriverla partendo dalla cella A192 fino alla cella AS192, perche' so che il limite max, sono 45 numeri.
Grazie per eventuale risposta.
Nelson
nelson1331
Utente Junior
 
Post: 93
Iscritto il: 18/02/08 08:58

Sponsor
 

Re: Formula in formato matrice : eliminare numeri doppi su r

Postdi Anthony47 » 11/04/22 23:37

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 :D ) 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
Avatar utente
Anthony47
Moderatore
 
Post: 19440
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Formula in formato matrice : eliminare numeri doppi su r

Postdi nelson1331 » 13/04/22 15:23

Grazie Anthony47. E' una funzione ottima, che fa risparmiare molto su tempi di elaborazione rispetto alle formule che avevo indicato.
Ottimo lavoro, come sempre.
nelson1331
Utente Junior
 
Post: 93
Iscritto il: 18/02/08 08:58


Torna a Applicazioni Office Windows


Topic correlati a "Formula in formato matrice : eliminare numeri doppi su riga":


Chi c’è in linea

Visitano il forum: Nessuno e 41 ospiti