| | Post: 2 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
29/07/2017 15:56 | |
Ciao ragazzi, io ho un foglio excel costituito da 2 colonne, la prima relativa a dei prodotti (univoci) e la seconda contenente dei codici afferenti ai prodotti, con una corrispondenza di 1 a n, ad esempio: COLONNA A COLONNA B RISULTATO ATTESO IN COLONNA C C 1.A 4.C;5.C B 2.B 2.B A 3.A 1.A;3.A;6.A D 4.C #N/d E 5.C #N/d 6.A Mi spiegate come risolvere questa cosa con una Macro o qualcosa di simile (Vba, funzione...) Grazie [Modificato da Wexcel 29/07/2017 15:58] |
|
| | Post: 3 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
29/07/2017 16:04 | |
In allegato un altro file di esempio con il risultato atteso.
Grazie |
| | Post: 1.516 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
29/07/2017 16:35 | |
ciao
il problema è sapere i reali valori delle tue colonne A e B.
Non che voglio "impicciarmi" del tuo file, ma per esempio se la col. B contenesse:
x.A
y.AAB
zs.AC
i record che soddisfano la ricerca per A sarebbero tutti e tre, in quanto in tutti è presente .A
Spero di essermi spiegato.
saluti
[Modificato da dodo47 29/07/2017 16:42] Domenico
Win 10 - Excel 2016 |
| | Post: 4 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
29/07/2017 16:53 | |
Ciao dodo47,
sei stato chiaro.
non penso ci sia questo tipo di problema, è tutto molto più semplice.
Se ti puo essere d'aiuto scarica il file allegato.
I valori sono molto simili (per caratteristica) a quelli riportati.
Grazie
|
| | Post: 552 | Registrato il: 02/08/2015
| Utente Senior | Excel 2013 | | OFFLINE |
|
29/07/2017 17:11 | |
Ciao a tutti,
@Wexcel
lato formule, per la lista univoca (colonna E) non ci sono problemi ma per il "concatenamento multiplo" tramite formule, dovresti scrivere una formula kilometrica senza la garazia dell'assenza di errori (in base al numero di elementi).
Detto questo... la cosa migliore è passare direttamente al VBA.
Sai qualcosa di questo linguaggio (in modo da poterlo in seguito adattare alle tue reali esigenze)?
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare." |
| | Post: 1.518 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
29/07/2017 17:13 | |
Ciao
ho adattato un mio vecchio lavoro.
Leggi quanto descritto e le formule in H e I (scegli tu) che fanno riferimento ad una udf che trovi nel modulo1.
Se servono spiegazioni chiedile.
Saluti
(nota: c'è qualche Dim in più che faceva riferimento ad altre necessità, cancellale se vuoi)
[Modificato da dodo47 29/07/2017 17:15] Domenico
Win 10 - Excel 2016 |
| | Post: 5 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
29/07/2017 17:13 | |
purtroppo no.
Avevo trovato questa funzione in una discussione simile ma a me non funziona:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("B:B")) Is Nothing Then
r = Target.Row
nome = "*" & Target.Value & "*": If nome = "**" Then Exit Sub
With ActiveSheet.Range("A:A")
Set f = .Find(nome, LookIn:=xlValues, LookAt:=xlWhole)
If Not f Is Nothing Then
Cells(r, 3).ClearContents
firstAddress = f.Address
Do
Cells(r, 3) = Cells(r, 3) & .Cells(f.Row, 1)
Cells(r, 3) = Cells(r, 3) & "; "
Set f = .FindNext(f)
Loop While Not f Is Nothing And f.Address <> firstAddress
Else
Cells(r, 3) = "n/d"
End If
End With
End If
End Sub |
| | Post: 6 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
29/07/2017 17:16 | |
grazie dodo47,
ma non c'è un modo di sistemare questa funzione ed automatizzare la cosa, senza usare formule?
mi potresti spiegare come funziona la formula che hai usato?
grazie |
| | Post: 1.519 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
29/07/2017 17:17 | |
ciao cro...scusa ma stavo scrivendo...salutissimi
[Modificato da dodo47 29/07/2017 17:17] Domenico
Win 10 - Excel 2016 |
| | Post: 553 | Registrato il: 02/08/2015
| Utente Senior | Excel 2013 | | OFFLINE |
|
29/07/2017 17:18 | |
dodo47, 29/07/2017 17.17:
ciao cro...scusa ma stavo scrivendo...salutissimi
"Sono le persone che nessuno immagina che possano fare certe cose, quelle che fanno cose che nessuno può immaginare." |
| | Post: 406 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
29/07/2017 17:18 | |
Ciao Wexcel
Dopo un saluto a dodo47 (ciao Domenico), per non fornirti la "pappa-pronta", vorrei che tu ragionassi su quello che chiedi.
Ti riporto il mio ragionamento sulla base dei dati da te forniti:
1°) devi riportare il col.E i dati di col.B senza duplicati. Puoi fare un copia/incolla e nella nuova colonna vai in Dati-Elimina duplicati.
2°) a questo punto ti serve un doppio ciclo che faccia quanto segue:
a - confronto fra il dato in col.E e il dato in col.B
b - se i dati sono uguali assumere il dato in col.C accodandolo ai precedenti
Tutto qui. Non so se è chiaro e quali sono le tue conoscenze di VBA, ma è molto più semplice di quello che sembra.
Fai sapere. Ciao,
Mario
|
| | Post: 407 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
29/07/2017 17:24 | |
Ehi ragazzi, state calmi
Non ho guardato prima di inserire e, pertanto, ho scritto qualcosa in più. Quello che ha detto cromagno (ciao Tore) è sacrosanto ma io farei tutto con VBA.
Ora, poichè l'ho già fatto e rischiando una "tirata d'orecchi" di dodo, posto la mia macro (da associare ad un pulsante (Modulo, non ActiveX)
Option Explicit
Sub riporta()
Dim ur1 As Long, ur2 As Long, i As Long, j As Long, tutte As String
'assume ultima riga col.B
ur1 = ActiveSheet.Cells(Rows.Count, 2).End(xlUp).Row
Range("B5:B" & ur1).Copy 'copia l'intervallo
Range("J5").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
'elimina i duplicati
ActiveSheet.Range("$J$5:$J$" & ur1).RemoveDuplicates Columns:=1, Header:=xlNo
'assume ultima riga col.J
ur2 = ActiveSheet.Cells(Rows.Count, 10).End(xlUp).Row
'esegue un doppio ciclo; il primo confronta i dati tabella, il secondo i dati subgruppo
For i = 5 To ur2
tutte = ""
For j = 5 To ur1
If Cells(i, 10) = Cells(j, 2) Then
tutte = tutte & Cells(j, 3) & ";"
End If
Next j
Cells(i, 11) = tutte
Next i
Cells(1, 1).Select
End Sub
E' anche commentata per farti capire come funziona. Attento che riporta i valori in altre colonne. A te il compito di ... sistemarla.
Ciao a tutti,
Mario |
| | Post: 3.387 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/07/2017 19:44 | |
Ciao a tutti
Mario, Domenico e Tore forse non ho capito nulla ma non sarebbe bastata una function con due aegomenti: valore da cercare e zona di ricerca.
Se il valore da cercare viene individuato concatenare con un ciclo l'offset abbinandolo con un punto e virgola.
Non so se mi sono spiegato.
Alfredo |
| | Post: 7 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
29/07/2017 20:40 | |
Marius, grazie mille del tuo prezioso aiuto ma la funzione non è proprio corretta, nel senso che NON devo riportare in col.E i dati di col.B senza duplicati MA semplicemente agganciare in colonna E, le corrispondenze relative ai dati indicati in colonna a B. non so se sono stato chiaro, ma per semplicità riporto un esempio :
COLONNA B COLONNA C RISULTATO ATTESO IN COLONNA E C 1.A 4.C;5.C B 2.B 2.B A 3.A 1.A;3.A;6.A D 4.C #N/d E 5.C #N/d 6.A
Grazie ancora ragazzi.
|
| | Post: 3.388 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
29/07/2017 20:43 | |
Mah l'esempio riportato nel file mi sembra molto più chiaro di questo
Alfredo |
| | Post: 8 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
29/07/2017 20:51 | |
Ragazzi, perdonatemi.
Al fine di essere più chiaro ho preparato un altro file di esempio.
Questo dovrebbe farvi capire di cosa ho bisogno...
Grazie
|
| | Post: 9 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
29/07/2017 20:52 | |
alfrimpa,
scusami ma l'esempio riportato nel file è diverso da quello riportato nel primo file che ho caricato.
Puoi dare un'occhiata al secondo file caricato?
|
| | Post: 408 | Registrato il: 24/06/2015
| Città: CATANIA | Età: 80 | Utente Senior | Excel2019 | | OFFLINE |
|
30/07/2017 07:22 | |
Buongiorno a tutti
@Wexcel
Vedi, come ho detto più sopra, in un Forum non bisogna cercare la pappa-pronta bensì esporre un problema, mostrare le proprie soluzioni, indicare dove si incontrano difficoltà e chiarire cosa si vuole ottenere.
Faccio il buono e dico che tu non segui questa traccia anche perchè ti avevo scritto
E' anche commentata per farti capire come funziona. Attento che riporta i valori in altre colonne. A te il compito di ... sistemarla.
Nonostante tutto ciò vieni fuori con una richiesta che è assolutamente diversa dalla originaria.
Beh, con tutta la buona volontà non mi sento di continuare. Posso solo dirti che la macro che ti ho postato SI PUO' ADATTARE alla tua richiesta. Fallo tu.
Ciao,
Mario
PS - Non voglio sembrare "cattivo" ma mi sembra tanto una presa per i fondelli e non ci sto. |
| | Post: 10 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
30/07/2017 09:14 | |
Marius44,
io non sto affatto cercando la "pappa pronta" come scrivi tu, ma non ho conoscenze del linguaggio VBA...
mi potete dare qualche indicazioni di qualche manuale e come iniziare ad apprendere questo linguaggio?
grazie |
| | Post: 11 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
30/07/2017 09:45 | |
Ragazzi,
sono riuscito a modificare i riferimenti di riga e colonna della Macro di Marius (che ringrazio) e ho collegato la macro ad un modulo.
Vorrei soltanto che i risultati venissero riportati nel Foglio 2 (del file allegato) ed agganciati ai relativi prodotti già presenti in quest'ultimo foglio (cioè come se fosse un semplice cerca vert multiplo)
Mi date qualche dritta? grazie
P.s. in allegato il file con le modifiche effettuate. |
| | Post: 1.520 | Registrato il: 06/04/2013
| Utente Veteran | 2010 | | OFFLINE |
|
30/07/2017 10:17 | |
Ciao
solo per curiosità: cosa non va nella macro che ho proposto?
Quella dell'uso di una udf è la strada più logica da eseguire in questo caso.
Ti ricordo che per individuare i prodotti, le descrizioni devono essere uguali, quindi non puoi scrivere da una parte:
Prodotto 1
e dall'altra
prodotto1
devono essere uguali: Prodotto 1 e Prodotto 1
saluti a tutti
[Modificato da dodo47 30/07/2017 10:17] Domenico
Win 10 - Excel 2016 |
| | Post: 12 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
30/07/2017 10:23 | |
dodo47,
la tua macro va bene soltanto che vorrei trovare un modo per automatizzarla, SENZA trascinare la formula per tutte le celle interessate.
ad esempio, quella proposta da Marius riconosce in automatico le celle contenenti dei valori....
non so se sono stato chiaro... |
| | Post: 3.389 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
31/07/2017 11:28 | |
Giusto per il gusto di partecipare propongo questa function
vb
Function Riporta1(a As Range, rng As Range)
Dim cel As Range
Dim stringa As String
For Each cel In rng
If cel.Value = a.Value Then
Riporta1 = Riporta1 & cel.Offset(0, 1).Value & "; "
End If
Next cel
End Function
Anche questa function va inserita in un modulo standard.
Alfredo |
| | Post: 13 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
31/07/2017 17:30 | |
Ciao Ragazzi,
dodo47 ho adattato la tua macro. Volevo chiederti soltanto come fare per evitare, qualora nella funzione di cerca.vert multiplo (nel caso in cuidopo la prima corrispondenza) ci fossero delle corrispondeze relative a delle celle vuote, che si presenti una situazione di questo tipo : "prima corrispondenza;;;" come posso fare per evitare i ; inutili?
grazie |
| | Post: 3.395 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
31/07/2017 17:54 | |
Con la mia function non hai il problema dei ";".
Per il corso VBA guarda qui
http://forum.wintricks.it/showthread.php?t=155252
Alfredo |
| | Post: 14 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
31/07/2017 18:06 | |
grazie alfrimpa,
ma la tua funzione come funziona scusa il gioco di parole !
me la spieghi? |
| | Post: 3.396 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
31/07/2017 18:12 | |
L'ho spiegato nel post 23.
La funzione va incollata nell'editor di VBA su un modulo standard come una qualsiasi macro.
La funzione opera come se fosse una normale funzione di Excel e va inserita in una cella; essa ha due argomenti: cosa cercare e dove cercarlo
Quindi se scriviamo
Stiamo dicendo di cercare E8 nel range B8:b18
La funzione esamina tutte le celle dell'intervallo e se trova che un valore è uguale al primo argomento della funzione concatena il contenuto della cella che è alla sua destra. [Modificato da alfrimpa 31/07/2017 18:14]
Alfredo |
| | Post: 15 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
31/07/2017 18:15 | |
Grazie Alfredo, un'ultima cosa: se oltre alla corrispondenza/e trovata volessi agganciare un altro campo contenente la descrizione della corrispondenza, come potrei fare?
|
| | Post: 3.397 | Registrato il: 21/06/2013
| Città: NAPOLI | Età: 70 | Utente Master | Excel 365 | | OFFLINE |
|
31/07/2017 18:24 | |
La funzione va modificata così
vb Function Riporta1(a As Range, rng As Range)
Dim cel As Range
Dim stringa As String
For Each cel In rng
If cel.Value = a.Value Then
Riporta1 = Riporta1 & cel.Offset(0, 1).Value & " " & cel.Offset(0, 2).Value & "; "
End If
Next cel
End Function
Ti allego il file con un esempio.
Ora sta a te studiare il codice e capire come funziona.
Alfredo |
| | Post: 16 | Registrato il: 28/07/2017
| Città: MILANO | Età: 36 | Utente Junior | 2010/2013 | | OFFLINE | |
|
31/07/2017 18:32 | |
Grazie infinite Alfri,
veramente l'ultimo dettaglio: se volessi che ad ogni corrispondeza andasse a capo e riportasse la successiva appunto andando a capo? |
|
|