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

CERCA.VERT CON RISULTATI MULTIPLI

Ultimo Aggiornamento: 02/08/2017 16:04
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

Re:
dodo47, 29/07/2017 17.17:

ciao cro...scusa ma stavo scrivendo...salutissimi



[SM=x423053]



"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 [SM=x423026]

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


vb
=riporta1(E8;$B$8:$B$18)


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

vb
=riporta1(E8;$B$8:$B$18)


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?
Vota:
Amministra Discussione: | Chiudi | Sposta | Cancella | Modifica | Notifica email Pagina precedente | 1 2 | 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 06:47. Versione: Stampabile | Mobile | Regolamento | Privacy
FreeForumZone [v.6.1] - Copyright © 2000-2024 FFZ srl - www.freeforumzone.com