Condividi:        

richiesta funzione excel elenco univoco

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

richiesta funzione excel elenco univoco

Postdi paigee3 » 14/02/12 09:52

Ciao ho un piccolo problema da risolvere.
Ho un elenco Excel in cui ciascuna cella può contenere uno o più valori.
Il mio obiettivo è ottenere un elenco ordinato di valori non ripetuti.
Ad esempio
Elenco iniziale

A1; A2
A1; A4
A3; A5; A1
cella vuota
A6

Elenco finale in un unica cella

A1 A2 A3 A4 A5 A6
e inoltre avere il numero di elementi totale non ripetuti

Grazie in anticipo :)
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Sponsor
 

Re: richiesta funzione excel elenco univoco

Postdi wallace&gromit » 14/02/12 10:10

ti propongo una soluzione "grezza" che può funzionare.

Prima di tutto esporti il tutto in txt e in un software di elaborazione testo trasformi tutti i tabulatori e gli spazi vuoti in a capo: così hai una disposizione ordinata di valori in verticale.

Poi fai una tabella pivot e ottieni un estratto dei singoli valori con anche il nuero di ripetizioni.
Infine puoi riportare tutto il contenuto della prima colonna della tabella pivot in una sola cella
Office2016 + 2019 su win11
Avatar utente
wallace&gromit
Utente Senior
 
Post: 2174
Iscritto il: 16/01/12 14:21

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 14/02/12 11:08

Avrei bisogno di una soluzione immediata ed automatica all'apertura o alla chiusura del file excel, in quanto siamo più persone che utilizziamo questo documento e non possiamo fare questi giri...sigh
Considerate poi che ci sono più fogli da aggiornare nel modo descritto in precedenza...
Aiutatemi please :cry:
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi Anthony47 » 14/02/12 22:52

Ciao paigee3, benvenuto nel forum.
Prima di complicarmi la vita vorrei sapere se sul foglio che contiene quei dati le colonne adiacenti sono libere od occupate; potrebbe inoltre essere utile allegare un file con dati verosimili da usare per prova.
Guarda qui per come fare: viewtopic.php?f=26&t=80395
Per allegare il link dovrai avere almeno tre messaggi pubblicati, ma sei autorizzato a scriverne uno di circostanza solo per arrivare a tre...

Ciao, ti aspettiamo
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 15/02/12 09:13

Grazie mille per il benvenuto...
Purtroppo il file esempio non ve lo posso allegare, perchè è un documento aziendale e quindi riservato, per il quale mi hanno chiesto di apportare queste modifiche, solo che mi risolta complicato non conoscendo bene le potenzialità e gli strumenti di Excel ed inoltre ho anche le attività di routine da portare a termine...
Cmq ritornando al mio documento, ha le colonne sia precedente che successive occupate ed in realtà il risultato finale dovrebbe essere riportato in un altro sheet contenuto sempre nello stesso foglio di lavoro.
Poi la cartella di lavoro contiene un numero di sheet variabili in base all'attività in corso.
Non so, se vi ho date tutte le info per aiutarmi, voi chiedete ed aiutatemi...
Vi ringrazio a tutti
Buona giornata a tutti
Paigee
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi Anthony47 » 15/02/12 14:40

Con tutte le approssimazioni dovute alla non disponibilita' di un foglio di dati campione, prova questa macro, derivata da quanto suggerito a max2011 (vedi viewtopic.php?f=26&t=94580&p=541318#p541268):
Codice: Seleziona tutto
Sub paig()
Dim CkCol As Integer, StartSh As String, DestSh As String, Final As String
Dim I As Long, LastCkC As Long, J As Integer, KCnt As Long
'
Dim myVal
CkCol = 5               'La colonna con i dati; 5=Colonna E
StartSh = "Foglio1"     'Il foglio con i dati
DestSh = "OutSheet"     'Il foglio di destinazione; sara' CANCELLATO all' inizio
'
Sheets(DestSh).Cells.Clear
Sheets(StartSh).Select
LastCkC = Cells(Rows.Count, CkCol).End(xlUp).Row
'
Sheets(DestSh).Range("D1").FormulaArray = _
 "=SUM(LEN(" & StartSh & "!R1C" & CkCol & ":R" & LastCkC & "C" & CkCol & "))-SUM(LEN(SUBSTITUTE(" & StartSh & "!R1C" & CkCol & ":R" & LastCkC & "C" & CkCol & ","";"","""")))"
'
KCnt = 1
For I = 1 To LastCkC
If Cells(I, CkCol) <> "" Then
    myVal = Split(Cells(I, CkCol).Value, ";")
    For J = 0 To UBound(myVal, 1)
    If Application.WorksheetFunction.CountIf(Sheets(DestSh).Range("B1").Resize(KCnt, 1), Trim(myVal(J))) = 0 Then
        Sheets(DestSh).Cells(KCnt, 2) = Trim(myVal(J))
        KCnt = KCnt + 1
    End If
    Next J
End If
Next I
Sheets(DestSh).Select
For I = 1 To KCnt
    If Cells(I, 2) = "" Then Exit For
    Final = Final & Cells(I, 2) & " "
Next I
Cells(1, 1).Value = Trim(Final)
Range("B:B").ClearContents
End Sub

Da excel: Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.
Modifica le tre istruzioni in testa usate er definire l' area di lavoro, poi lancia la macro.
Il foglio usato come "DestSh", quello in cui sara' presentato il risultato, deve gia' esistere e sara' azzerato completamente prima di procedere al calcolo.

Prova e fai sapere, ma per ulteriori interventi la disponibilita' di un file campione e' necessaria.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 15/02/12 15:33

Ok, grazie Antony...lo provo subito e ti faccio sapere...
Altrimenti provo a farti un esempio cambiando nomi delle celle e campi e vediamo un pò...
Grazie ancora dell'aiuto
Buon proseguo paigee
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 15/02/12 16:10

Ho provato...funziona... grazie grazie...:)
Ho notato solo due cosette da modificare:
- copia l'intestazione della colonna anche, io non vorrei...mi aiutate anche in qst?
- inoltre dovrei copiare in base allo sheet che si aggiorna il risultato della macro in un punto esatto del foglio di uscita e non cancellare tali risultati all'inzio; per questo pto credo di dover cancellare la riga di codice "Range("B:B").ClearContents", giusto?
Mi date delle dirette anche per qst due punti?
Grazie grazie grazie e grazie ancora Anthony47... :)
Ps ovviamente lo debaggerò in maniera ancora più approfondita e vi farò sapere....
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi Anthony47 » 15/02/12 23:05

Questa macro non usa un foglio di appoggio ma scrive direttamente il risultato in Foglio /Cella definiti nell' istruzione Set DestSh:
Codice: Seleziona tutto
Sub paig2()
Dim CkCol As Integer, StartSh As String, Final As String
Dim I As Long, LastCkC As Long, J As Integer
Dim myVal, myDict, DestSh As Range
'
CkCol = 5               'La colonna con i dati; 5=Colonna E
StartSh = "Foglio1"     'Il foglio con i dati
Set DestSh = Sheets("OutSheet").Range("A1")     'Foglio e Cella dove sara' scritto il risultato
'
Sheets(StartSh).Select
LastCkC = Cells(Rows.Count, CkCol).End(xlUp).Row
Set myDict = CreateObject("Scripting.Dictionary")
'
For I = 2 To LastCkC     'comincia da riga 2
If Cells(I, CkCol) <> "" Then
    myVal = Split(Cells(I, CkCol).Value, ";")
    For J = 0 To UBound(myVal, 1)
        If Not myDict.exists(Trim(myVal(J))) Then
            myDict.Add Trim(myVal(J)), Trim(myVal(J))
            Final = Final & Trim(myVal(J)) & " "
        End If
    Next J
End If
Next I
DestSh.Value = trim(Final)
End Sub
Comincia ad analizzare da riga 2.

Prova e fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 16/02/12 08:38

Buongiorno Anthony...
Ti ringrazio per l'ulteriore aiuto... :)
Proverò la macro in giornata e ti farò sapere...
Ciao e grazie ancora
Paigee
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 16/02/12 11:50

Provata...ovviamente funziona....thx... :)
Ti ringraziano anche i miei colleghi....
Ciao e grazie ancora
Alla prox
Paigee
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi Anthony47 » 16/02/12 12:26

Allora fate una colletta e inviate a Emergency o Medici senza frontiere, ne faranno buon uso.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 28/02/12 09:09

Ok, ci penseremo...
Dobbiamo chiederti ancora una mano.
Vorremmo che la macro partisse all'apertura del file excel, inserendola solo nel primo folder e che ciclasse sul numero di fogli attivi nello sheet.
Inoltre la lista degli elementi contati in ogni foglio, dovrebbe andare nel primo folder nel cella della riga corrispondente al foglio.
Vedo se riesco ad allegarti un esempio, considera come risultato atteso le celle evidenziate in giallo.
Ciao e grazie
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 28/02/12 09:17

Siamo riusciti ad inserire il file di esempio....
Ecco il link: "https://rapidshare.com/files/913821461/Esempio.xls"
Grazie mille
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 29/02/12 10:01

Nessuno ci può continuare ad aiutare??? Please....
Grazie ancora e buona giornata
Paigee3
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42

Re: richiesta funzione excel elenco univoco

Postdi Anthony47 » 29/02/12 12:21

E' che quelle sono specifiche funzionali, non domande per un forum...
Comunque avendo fatto 30 proviamo ancora questo step.
Aggiungi questa macro
Codice: Seleziona tutto
Sub pippo()
For I = 2 To ThisWorkbook.Worksheets.Count
Sheets(I).Select
Call paig2
Next I
End Sub

Modifica in testa la vecchia macro:
Codice: Seleziona tutto
Sub paig2()
    Dim CkCol As Integer, StartSh As String, Final As String
    Dim I As Long, LastCkC As Long, J As Integer
    Dim myVal, myDict, DestSh As Range
    '
    CkCol = 3               'La colonna con i dati; 5=Colonna E
'    StartSh = "Foglio1"     'Il foglio con i dati      '****
    Set DestSh = Sheets("OutSheet").Cells(Rows.Count, 4).End(xlUp).Offset(1, 0)   'Foglio e Cella dove sara' scritto il risultato
    '
'    Sheets(StartSh).Select                     '***
    LastCkC = Cells(Rows.Count, CkCol).End(xlUp).Row
'altre vecchie istruzioni
Le istruzioni modificate soo marcate ***

Modifica in coda la vecchia macro
Codice: Seleziona tutto
DestSh.Offset(0, -3).Value = ActiveSheet.Name    '<<< AGGIUNTA
    End Sub

Poi lancia la macro pippo.
La macro esaminera' i fogli dal 2° all' ultimo, guardando in colonna C da riga 2 verso il basso; la colonna puo' essere definita variando l' istruzione CkCol = 3 , la riga puo' essere variata modificando la riga For I = 2 To LastCkC ; ma questi valori valgono per tutti i fogli esaminati.
L' elenco verra' costruito in un foglio chiamato OutSheet (che deve esistere; puo' essere modificato variando l' istruzione Set DestSh = etc etc), in colonna C, dalla prima cella libera verso il basso, mentre in colonna A della stessa riga verra' scritto il nome del file a cui quell' elenco appartiene.

Questo probabilmente e' leggermente diverso dalle vostre specifiche.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: richiesta funzione excel elenco univoco

Postdi paigee3 » 29/02/12 13:36

Ci proviamo...ti ringrazio delle diritte e del tempo che ci hai dedicato..siamo molto inesperti di questa ambiente...
Grazie ancora
Ciao
Paigee
paigee3
Utente Junior
 
Post: 11
Iscritto il: 14/02/12 09:42


Torna a Applicazioni Office Windows


Topic correlati a "richiesta funzione excel elenco univoco":


Chi c’è in linea

Visitano il forum: Nessuno e 76 ospiti