Pagina precedente | 1 | Pagina successiva
Vota | Stampa | Notifica email    
Autore

Unisci testo in cella ma non ripetere testo.unisci

Ultimo Aggiornamento: 01/05/2020 18:56
Post: 7
Registrato il: 16/04/2020
Età: 34
Utente Junior
2016
OFFLINE
01/05/2020 09:50

Unisci testo in cella ma non ripetere (testo.unisci)
Salve a tutti.Mi chiedevo se qualcuno di voi sappia come risolvere questo piccolo problema.Ho una cartella con 2 fogli.Dalla convalida dati seleziono un ingrediente dal foglio tabella.Ogni ingrediente ha degli allergeni che riporto accanto a esso.Nel foglio ricetta quando da menu a tendina selezione l'ingrediente mi riporta anche i relativi allergeni.Adesso vorrei che mi desse come risultato tutti gli allergeni contenuti negli ingredienti selezionati ma senza ripetizione.Dei risultati univoci.Ho provato con testo.unisci ma non il risultato che voglio ottenere.
Non ho provato con vba perchè le mie capacità sono a livello base
Grazie
[Modificato da ema1990 01/05/2020 09:58]
Post: 725
Registrato il: 15/01/2016
Città: ROMA
Età: 51
Utente Senior
2016
OFFLINE
01/05/2020 11:22

Buongiorno
quello che chiedi con le formule è impossibile e dubito fortemente che si possa fare anche col VBA in quanto stai chiedendo di estrarre una lista univoca non di dati contenuti in celle diverse ma delle parole contenute dentro stringhe di testo...
Quindi e parlo di formule (non scrivo codice) una soluzione potrebbe essere modificare il foglio Tabella mettendo ogni allergene in una cella diversa e una volta richiamati questi dati in una tabella di servizio (da nascondere) fare la lista univoca di questi allergeni sempre spalmati su più colonne oppure in una cella unica con TESTO.UNISCI oppure partendo dalle formule che hai in colonna I estrarre le varie parole e poi farne una lista univoca o spalmata su più colonne (scelta consigliata) o con TESTO.UNISCI in singola cella
Post: 7
Registrato il: 16/04/2020
Età: 34
Utente Junior
2016
OFFLINE
01/05/2020 11:37

@DANILOFIORINI grazie per la risposta.Vediamo se in vba si potrebbe fare se qualcuno sa metterci le mani
Post: 726
Registrato il: 15/01/2016
Città: ROMA
Età: 51
Utente Senior
2016
OFFLINE
01/05/2020 11:44

Ciao
solo per curiosità (non conosco il contesto) però perchè trattare i dati in questa maniera andandosi a complicare alla massima potenza il tutto (anche perchè magari si può fare col VBA se poi devi fare qualche manutenzione al codice che eventualmente ti fanno se non si sa dove mettere le mani sarai sempre a dovere chiedere aiuto a qualcuno)
mentre se si gestiscono i dati correttamente cioè una cella un record si riesce ad ottenere con le formule quasi tutto anche perchè e questo è solo un mio pensiero la scelta di mettere dei risultati tutti in singola cella è solo un fatto estetico
Post: 2.751
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/05/2020 11:59

Ciao
ti faccio un esempio "strettamente legato" (pertanto riferito a quelle sole tre righe) del tuo foglio che stampa in I17 il risultato.

Ovviamente si può rendere dinamico.

saluti

Sub Univoci()
Dim mColl As New Collection
For j = 10 To 12
mstr = mstr & Cells(j, 9) & ","
Next
mstr = Left(mstr, Len(mstr) - 1)
msplit = Split(mstr, ",")
For j = 0 To UBound(msplit)
    On Error Resume Next
    mColl.Add msplit(j), msplit(j)
    On Error GoTo 0
Next j
mstr = ""
For j = 1 To mColl.Count
    mstr = mstr & mColl(j) & ","
Next j
mstr = Left(mstr, Len(mstr) - 1)
Range("I17") = mstr
End Sub





[Modificato da dodo47 01/05/2020 12:00]
Domenico
Win 10 - Excel 2016
Post: 8
Registrato il: 16/04/2020
Età: 34
Utente Junior
2016
OFFLINE
01/05/2020 12:03

@DANILOFIORINI
Diciamo che si è pura estetica!!Ti allego un pdf "completo" del lavoro e nella casella allergeni verranno copiati gli allergeni di ciascuno presi da un foglio nascosto!
[Modificato da ema1990 01/05/2020 12:06]
Post: 2.752
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/05/2020 12:12

Ciao
facciamo meglio ed utilizziamo una UDF.

Metti in un modulo:

Function Unisci(rng As Range) As String
Dim mColl As New Collection
For j = 10 To 12
mstr = mstr & Cells(j, 9) & ","
Next
mstr = Left(mstr, Len(mstr) - 1)
msplit = Split(mstr, ",")
For j = 0 To UBound(msplit)
    On Error Resume Next
    mColl.Add msplit(j), msplit(j)
Next j
mstr = ""
For j = 1 To mColl.Count
    mstr = mstr & mColl(j) & ","
Next j
Unisci = Left(mstr, Len(mstr) - 1)
End Function


Poi, dove vuoi il risultato, scrivi:
=unisci(allergeni)

Naturalmente, al posto di allergeni, ci puoi mettere una range qualsiasi (che ovviamente abbia quelle caratteristiche); per esempio:

=unisci(I10:I15)

saluti





[Modificato da dodo47 01/05/2020 12:15]
Domenico
Win 10 - Excel 2016
Post: 9
Registrato il: 16/04/2020
Età: 34
Utente Junior
2016
OFFLINE
01/05/2020 12:16


@dodo47
grazie mille per il codice.Adesso proverò a farlo lavorare in fogli diversi.Allergeni in un foglio e risultato degli univoci in un altro.Grazie
Post: 2.753
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/05/2020 12:20

occhio che per farlo funzionare su altro foglio bisogna modificare la function

saluti




Domenico
Win 10 - Excel 2016
Post: 10
Registrato il: 16/04/2020
Età: 34
Utente Junior
2016
OFFLINE
01/05/2020 12:39

@dodo47
alla fine opterò per copiare il risultato"unisci(allergeni)" nella cella della tabella finale di lavoro,meno casini in giro:).
Grazie mille a tutti
Post: 2.754
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/05/2020 12:42

ciao
non è necessario, come vedi nel foglio Tabella per esempio, in F12 c'è lo stesso risultato, basta una piccola modifica. Vedi allegato

Function Unisci(rng As Range) As String
Dim mColl As New Collection
Set sh = Worksheets(rng.Parent.Name)
For j = 10 To 12
mstr = mstr & sh.Cells(j, 9) & ","
Next
mstr = Left(mstr, Len(mstr) - 1)
msplit = Split(mstr, ",")
For j = 0 To UBound(msplit)
    On Error Resume Next
    mColl.Add msplit(j), msplit(j)
Next j
mstr = ""
For j = 1 To mColl.Count
    mstr = mstr & mColl(j) & ","
Next j
Unisci = Left(mstr, Len(mstr) - 1)

End Function


saluti




Domenico
Win 10 - Excel 2016
Post: 11
Registrato il: 16/04/2020
Età: 34
Utente Junior
2016
OFFLINE
01/05/2020 14:15

@dodo47
allora ho messo il codice e riadattato alla mia parziale cartella.Nella cartella calcolo ricopia ma non cancella i "doppioni".Penso che il motivo sia che adesso i valori sono tutti in colonna,o sbaglio?
Grazie
Post: 2.756
Registrato il: 06/04/2013
Utente Veteran
2010
OFFLINE
01/05/2020 16:10

Ciao
no, il fatto è che hai cambiato il separatore, prima era (,) virgola ora è punto e virgola (;).

Con l'occasione fai una piccola rettifica (ti avevo detto che il codice era "strettamente mirato" al tuo esempio.

Function Unisci(rng As Range) As String
Dim mColl As New Collection
Set sh = Worksheets(rng.Parent.Name)
For j = 2 To rng.Rows.Count
    If sh.Cells(j, 1) <> "" Then
        mstr = mstr & sh.Cells(j, 1) & ";"
    End If
Next
mstr = Left(mstr, Len(mstr) - 1)
msplit = Split(mstr, ";")
For j = 0 To UBound(msplit)
    On Error Resume Next
    mColl.Add msplit(j), msplit(j)
Next j
mstr = ""
For j = 1 To mColl.Count
    mstr = mstr & mColl(j) & ";"
Next j
Unisci = Left(mstr, Len(mstr) - 1)
End Function


Se per caso può capitare che in alcuni fogli il separatore sia "," ed in altri ";" o qualsiasi altro, fammelo sapere che ti faccio inserire oltre il range di calcolo, anche il titpo di separatore.

saluti



[Modificato da dodo47 01/05/2020 16:25]
Domenico
Win 10 - Excel 2016
Post: 12
Registrato il: 16/04/2020
Età: 34
Utente Junior
2016
OFFLINE
01/05/2020 18:56

@dodo47 grazie mille per la delucidazione. Sei stato gentilissimo.
Saluti
Vota: 15MediaObject5,00514 5
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 | Pagina successiva
Nuova Discussione
 | 
Rispondi
Cerca nel forum
Tag discussione
Discussioni Simili   [vedi tutte]
Feed | Forum | Bacheca | Album | Utenti | Cerca | Login | Registrati | Amministra
Tutti gli orari sono GMT+01:00. Adesso sono le 16:34. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com