Condividi:        

[Excel 2010] Ricerca verticale personalizzata

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

[Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 06/07/12 10:25

Salve ragazzi, mi servirebbe aiuto nel risolvere una problematica riguardo ad una ricerca verticale modificata.
Allora cerco di spiegarmi al meglio,
Ho un "database in excel" dove ho in prima colonna un codice identificativo alfanumerico e nella colonna g i codici costruttori.Questa Cartella di lavoro è composta da circa 26 fogli e ogni giorno su ogni foglio vengono aggiunte una 10 di righe.
Ora da un nuovo file excel ho una colonna con codici costruttori,e la prima colonna vuota, voglio cercare ogni codice in tutto il mio database, nel caso in cui la ricerca trova l'elemento, come risposta vorrei avere il "codice identificativo" corrispondente in prima colonna, se invece l'elemento non viene trovato, andrò io a mano ad aggiungerlo.

grazie anticipatamente
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Sponsor
 

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi Flash30005 » 06/07/12 12:44

Ciao Alex_Lougher e benvenuto nel Forum

Non è chiaro cosa vorresti cercare nel database se la tua prima colonna del nuovo file excel è vuota :roll:

ciao

P.s. E' preferibile pubblicassi (dopo il terzo post) i file in oggetto mascherando dati sensibili
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 06/07/12 17:40

Sorry per la poca chiarezza, ma qsto problema mi sta incasinando Totalmente....allora

io ho un "database", o meglio una cartella di lavoro "CONDIVISA" con 30 fogli di questo tipo più o meno :

. . . . . . . . A . . . . . . B. . . . _ . C . . . . .D. . . . . . . . G
. . - . .. - COD_ID ________________________________COD_PROD
1 -------------AHA-1_________________________________ BS123
2---------------AHA-2__________________________________CCDI4 _ _ _ Questa è la mia cartella di lavoro"database"
3--------------AHA-3___________________________________PY765 ________Composta da 30 fogli strutturati così
4--------------AHA-4___________________________________OUT22

ora da un nuovo file excel in cui ho solo il campo COD_PROD, come in esempio
ES:
. . . . . . . . A . . . . . . B. . . . _ . . . . . . . . c
. . - . .. - COD_ID ______________________COD_PROD
1 -------------"vuoto"_______________________ BS123
2---------------"vuoto"________________________ AKS43
3--------------"vuoto"________________________ I08765
4--------------"vuoto"______ __________________OUT22

voglio effetuare un cerca di questi COD_PROD nel mio database, se la ricerca va a buon fine e quindi trova l'elemento come risposta vorrei una cosa del genere:
. . . . . . . . A . . . . . . B. . . . _ . . . . . . . . c
. . - . .. - COD_ID ______________________COD_PROD
1 -------------AHA-1_______________________ BS123
2---------------"non presente"_________________ AKS43
3--------------"non presente"_________________ I08765
4--------------"AHA-4" ________________________OUT22

Questo è il risultato finale che vorrei sulla tabella, i codici non prensenti nel database poi li aggiungerò io a mano.
Avevo pensato però che sarebbe meglio fare una ricerca nel database CellaxCella , unico contro è che se la dimensione del database è molto ampia, la ricerca sia moooolto lenta.
Oppure potrei importare il "database" in tabelle access, effettuare le ricerca, aggiornare il database ed esportarlo dinuovo in excel.
Si accettano soluzioni di ogni genere!!
cosa mi consigliate?

Grazie :D
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi Flash30005 » 06/07/12 21:25

Solo alcune domande
1) il COD_PROD si trova nella colonna C del file che devi creare?
1a) (e nella colonna G del database)?

2) COD_ID si trova nella colonna A sia del file che devi creare sia nella colonna A dei fogli del database?

3) il codice COD_PROD (es.: BS123) lo trovi solo su un foglio del database o su più fogli, e, in questo caso, quale COD_ID deve prendere in considerazione (se diverso)?

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi Anthony47 » 07/07/12 02:19

Ciao Alex_Lougher, benvenuto anche da parte mia.
Ho un "database in excel" dove ho in prima colonna un codice identificativo alfanumerico e nella colonna g i codici costruttori.Questa Cartella di lavoro è composta da circa 26 fogli e ogni giorno su ogni foglio vengono aggiunte una 10 di righe.
Vedi che cosa succede quando un "database" invece di essere costituito da un insieme aggregato di dati e' disperso su N fogli?
Il mio suggerimento e' che ti crei un ulteriore foglio nel file "database.xls" che riassuma in col A tutti i codici presenti e in B i Codici costruttori; poi farai un Cerca.Vert su questo foglio per estrarre il tuo dato, se ancora vorrai farlo.
Per questo ti servira' una macro come questa:
Codice: Seleziona tutto
Sub aggr()
Dim MyVArr, LastA As Long, I As Long, J As Long, K As Long
Dim SumSh As String
SumSh = "Summary"
Sheets(SumSh).Cells.ClearContents
'
For I = 1 To ThisWorkbook.Worksheets.Count
    Sheets(I).Select
    If ActiveSheet.Name <> SumSh Then
        LastA = Cells(Rows.Count, 1).End(xlUp).Row
        MyVArr = Range("A1:G" & LastA)
        For J = LBound(MyVArr, 1) To UBound(MyVArr, 1)
        Alrd = Application.Match(MyVArr(J, 1), Sheets(SumSh).Range("A1").Resize(K + 1, 1), 0)
        If IsError(Alrd) Then
            LastSA = Sheets(SumSh).Cells(Rows.Count, 1).End(xlUp).Row
            Sheets(SumSh).Range("A1").Offset(LastSA, 0) = MyVArr(J, 1)
            Sheets(SumSh).Range("A1").Offset(LastSA, 1) = MyVArr(J, 7)
            Sheets(SumSh).Range("A1").Offset(LastSA, 2) = ActiveSheet.Name
            K = K + 1
        Else
            Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) = _
                Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) + 1
        End If
        Next J
    End If
Next I
End Sub

La macro va inserita nel file Database; questo file deve contenere un foglio chiamato "Summary", che sara' inizialmente svuotato senza nessuna richiesta di conferma; in questo foglio verra' creato un elenco contenente:
-colonna A, la colonna A dei singoli fogli
-colonna B, la colonna G dei singoli fogli
-colonna C, il nome del foglio in cui quel valore e' stato trovato la prima volta
-colonna D, la conta di eventuali duplicati di quel valore (se si dovesse trovare su piu' fogli)

Come detto, la tua Cerca.Vert a questo punto lavorera' sui dati presenti nel foglio Summary.

Prova e fai sapere; e se non risolvi rispondi anche alle domende di Flash (vedi sopra).
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 07/07/12 12:31

Ciao Flash30005,
Si, nel file "nuovo" , il cod_prod è nella colonna C, e nel database in colonna G.
Se nel caso ci fosse qualke modifica nei file andrò a modificare la macro o quel ke sarà ;)

Si il COD_ID si trova sempre nella prima colonna!

I Cod_PROD sono "univoci" dovrebbero trovarsi solo una volta nella cartella di lavoro, ma il problema è che i codici potrebbero assomigliarsi tipo il COD_PROD=bss123 avrà un COD_ID=aha-1 , ma in un'altro foglio possiamo trovare COD_PROD=bss-1-23 con COD_ID=aha-rt-43 , vorrei che la macro mi faccia vedere quali COD_PROD ha trovato simili a quello ricercato, e lasciar scegliere a me quale utilizzare per la codifica.

Intanto Provo la soluzione di Anthony47 ...

Grazie mille per l'aiutoooo :D
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 07/07/12 13:31

Anthony47 ha scritto:Ciao Alex_Lougher, benvenuto anche da parte mia.
Ho un "database in excel" dove ho in prima colonna un codice identificativo alfanumerico e nella colonna g i codici costruttori.Questa Cartella di lavoro è composta da circa 26 fogli e ogni giorno su ogni foglio vengono aggiunte una 10 di righe.
Vedi che cosa succede quando un "database" invece di essere costituito da un insieme aggregato di dati e' disperso su N fogli?
Il mio suggerimento e' che ti crei un ulteriore foglio nel file "database.xls" che riassuma in col A tutti i codici presenti e in B i Codici costruttori; poi farai un Cerca.Vert su questo foglio per estrarre il tuo dato, se ancora vorrai farlo.
Per questo ti servira' una macro come questa:
Codice: Seleziona tutto
Sub aggr()
Dim MyVArr, LastA As Long, I As Long, J As Long, K As Long
Dim SumSh As String
SumSh = "Summary"
Sheets(SumSh).Cells.ClearContents
'
For I = 1 To ThisWorkbook.Worksheets.Count
    Sheets(I).Select
    If ActiveSheet.Name <> SumSh Then
        LastA = Cells(Rows.Count, 1).End(xlUp).Row
        MyVArr = Range("A1:G" & LastA)
        For J = LBound(MyVArr, 1) To UBound(MyVArr, 1)
        Alrd = Application.Match(MyVArr(J, 1), Sheets(SumSh).Range("A1").Resize(K + 1, 1), 0)
        If IsError(Alrd) Then
            LastSA = Sheets(SumSh).Cells(Rows.Count, 1).End(xlUp).Row
            Sheets(SumSh).Range("A1").Offset(LastSA, 0) = MyVArr(J, 1)
            Sheets(SumSh).Range("A1").Offset(LastSA, 1) = MyVArr(J, 7)
            Sheets(SumSh).Range("A1").Offset(LastSA, 2) = ActiveSheet.Name
            K = K + 1
        Else
            Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) = _
                Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) + 1
        End If
        Next J
    End If
Next I
End Sub

La macro va inserita nel file Database; questo file deve contenere un foglio chiamato "Summary", che sara' inizialmente svuotato senza nessuna richiesta di conferma; in questo foglio verra' creato un elenco contenente:
-colonna A, la colonna A dei singoli fogli
-colonna B, la colonna G dei singoli fogli
-colonna C, il nome del foglio in cui quel valore e' stato trovato la prima volta
-colonna D, la conta di eventuali duplicati di quel valore (se si dovesse trovare su piu' fogli)

Come detto, la tua Cerca.Vert a questo punto lavorera' sui dati presenti nel foglio Summary.

Prova e fai sapere; e se non risolvi rispondi anche alle domende di Flash (vedi sopra).




Grazie mille per il tuo aiuto Flash, il problema è quasi risolto del tutto, ovviamente la funzione cerca.vert da poca flessibilità, ma cmq in questo modo mi risparmio già 1/3 del lavoro...ottima idea quella del raggruppamento della cartella in un solo foglio.
Ti volevo chiedere solo se è possibile effettuare la stessa macro su una cartella di lavoro condivisa, perche in passato ho avuto problemi nel inserire macro in file condivisi..sapresti aiutarmi anche in questo?!
Resta il fatto che mi hai "salvato" :D
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi Anthony47 » 08/07/12 01:12

Grazie mille per il tuo aiuto Flash, il problema è quasi risolto del tutto
Forse stai dicendo che hai deciso di usare l' approccio che ti ho suggerito? (anche se non capisco in che cosa consiste il rimante 66% del lavoro da fare)

Le macro vanno impostate prima di rendere il file condiviso; per le limitazioni sui file condivisi vedi l' help on line di excel alla voce "Funzioni non disponibili nelle cartelle di lavoro condivise"; la macro che ho suggerito non usa prestazioni non disponibili in modalita' "file condiviso", quindi non dovresti avere problemi a usarla.

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

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 10/07/12 10:46

Sorry Anthony47 ...sto utilizzando il tuo metodo, mi trovo abbastanza bene, l'unico problema ke il cerca.vert mi da, è che di sicuro non posso usare l'approssimazione, quindi quando vado a fare la ricerca mi da solo le corrispondenze esatte, invece vorrei ke nel caso non ci sia una corrispondenza esatta, mi dia i valori più vicini a quelli ricercati, e lasciarmi la scelta decisionale.
A volte nel "database" ho il codice analogdevice-amr409 invece nel file dove faccio il cerca.vert ho il codice amr409, mi piacerebbe se la funzione di ricerca come risposta mi desse nelle varie scelte anche quella giusta, nel caso che esistesse, in modo da poter decidere io se il codice corrisponde oppure no...un funzionamento simile al Tasto Trova :D

Spero di essere stato chiaro, il caldo non aiuta molto!! :)
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi Anthony47 » 11/07/12 00:49

Per qualcosa simile al tasto Trova, con possibilita' di ricerca a livello di stringa o di parola intera dovresti guardare quanto sviluppato per trittico69 qui:
viewtopic.php?f=26&t=95607

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

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 12/07/12 11:38

Anthony47 ha scritto:Per qualcosa simile al tasto Trova, con possibilita' di ricerca a livello di stringa o di parola intera dovresti guardare quanto sviluppato per trittico69 qui:
viewtopic.php?f=26&t=95607

Ciao


Ho letto il topic, diciamo che come idea si avvcinia , ma nn è proprio ciò che mi serve, la mia ricerca viene effettuata su due cartelle di lavoro diverse.
Quando il cerca.vert non trova una corrispondenza esatta, vorrei un modo per mettere l'utente davanti alla scelta del valore trovato che si avvicina di più alla stringa cercata.
Mi daresti qlk dritta?? Gazieee :D
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi Anthony47 » 13/07/12 00:31

Quanto sviluppato per trittico69 lavora "sul foglio attivo"; l' area di ricerca e' impostata in una riga del codice (quindi si varia abbastanza facilmente); la ricerca avviene a stringhe o a parole; possibilita' di trasformare caratteri speciali o stringhe in caratteri /stringhe standardizzate; ricerca fatta in realtime (i valori trovati vengono visualizzati sul foglio uno dopo l' altro premendo "Cerca") oppure in batch (i risultati della ricerca vengono presentati tutti in una userform riepilogativa, insieme con alcune altre colonne preimpostabili del record; selezionando un valore si visualizza il record sul foglio excel).
Un file di esempio fu pubblicato qui: viewtopic.php?f=26&t=95607#p549601 (le macro sono evolute notevolmente rispetto a quella versione di file, ma posso pubblicarle come risultato finale per risparmiarti di leggere una discussione alquanto lunga).

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

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 13/07/12 12:44

Se mi dici che nel mio caso possa andare bene, mi fido...il funzionamento lo vedo abbastanza semplice da usare, il problema sta nella creazione o nell'adattamanento al mio caso...Se mi dici cosa fare, io ti seguo passo passo..
;)
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 13/07/12 17:08

Ho seguito la discussione del topic che mi hai consigliato, sono arrivato fino alla fine aggiornando i vari useform...ora per applicarlo al mio caso. ti invio 3 file excel in privato, uno è il database, l'altro è il file da codificare,e il terzo è il risultato finale che vorrei puoi fare qualsiasi modifica :)...fammi sapere..
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 17/07/12 12:29

Anthony47 spero che tu nn mi abbia abbandonato, ti ho inviato un mess privato, ma nn so se ti è arrivato...aspetto tue notizie! :-)
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi Anthony47 » 18/07/12 01:45

Come gia' detto altrove ho trascurato per parecchi giorni tutto il forum per per impegni superiori legati alle mia vacanze :D
Ho guardato il file trasmesso; se l' obiettivo e' riempire la colonna Cod NES con l' equivalente codice che leggi in corrispondenza del componente, allora dovresti poter usare il manufacturer code (colonna H di "esempio bom"); per questo allora dovrai riportare nel foglio Summary anche appunto il manufacturer code (ad esempio in col E di Summary) e userai poi, in A2 di "esempio bom" la formula
Codice: Seleziona tutto
=INDICE('[es foglio codifica.xlsx]Summary'!$A:$A;CONFRONTA(H2;'[es foglio codifica.xlsx]Summary'!$E:$E;0))

Copiare poi verso il basso.

E' idoneo?
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 08/08/12 19:32

ciao anthony, scusa se non ti ho più fatto sapere niente, ma avevo accantonato un pokino questa idea, ora però è arrivato il momento di affrontare il problema e risolverlo!! :D

Con l'idea ci siamo...ma vorrei ampliare la risoluzione del problema, nel senso:

con il cerca.vert , viene fatta una comparazione di tutta la stringa, io vorrei avere una "comparazione tra caratteri",
vorrei che quando effettuo la ricerca di una cella nel mio database(foglio Summary), se non ci sia la corrispondenza esatta, vorrei che si aprisse tipo un form con una listbox, e dentro la listbox(viewer) vorrei le corrispondenze più vicine a quella ricercata, sia quelle più lunghe della stringa ricercata sia quelle più piccole che il programma è riuscito a trovare, e con un click da parte dell'utente scegliere la riga da utilizzare...per la listbox più o meno so già come usarla...ma per il resto non so dove o come posso cominciare..
Qualke consiglio x me?!
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 11/09/12 13:19

Codice: Seleziona tutto
Sub aggr()
Dim MyVArr, LastA As Long, I As Long, J As Long, K As Long, LastSA As Long
Dim SumSh As String
Workbooks("Foglio codifica Nuovo.xlsm").Activate
SumSh = "Summary"
Sheets(SumSh).Cells.ClearContents
'
For I = 2 To ThisWorkbook.Worksheets.Count
    Sheets(I).Select
    If ActiveSheet.Name <> SumSh Then
        LastA = Cells(Rows.Count, 1).End(xlUp).Row
        MyVArr = Range("A1:AC" & LastA)
        For J = LBound(MyVArr, 1) To UBound(MyVArr, 1)
        Alrd = Application.Match(MyVArr(J, 1), Sheets(SumSh).Range("A1").Resize(K + 1, 1), 0)
        If IsError(Alrd) Then
            LastSA = Workbooks("Foglio codifica Nuovo.xlsm").Sheets(SumSh).Cells(Rows.Count, 1).End(xlUp).Row
            Sheets(SumSh).Range("A1").Offset(LastSA, 3) = MyVArr(J, 1)
            Sheets(SumSh).Range("A1").Offset(LastSA, 0) = MyVArr(J, 29)
            Sheets(SumSh).Range("A1").Offset(LastSA, 1) = MyVArr(J, 28)
            Sheets(SumSh).Range("A1").Offset(LastSA, 2) = MyVArr(J, 27)
          '  Sheets(SumSh).Range("A1").Offset(LastSA, 4) = ActiveSheet.Name
            K = K + 1
        Else
            Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) = _
                Sheets(SumSh).Range("A1").Offset(Alrd - 1, 3) + 1
        End If
        Next J
    End If
Next I
End Sub



Questo è il codice applicato al mio caso fatto da Anthony47, solo ora però mi sn accorto che se faccio partire la macro mentre excel ha aperto altre cartelle di lavoro...il tutto invece di durare 20/30 secondi....ci impiega tipo un paio di ore...Qualkuno può aiutarmi??!!
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi Anthony47 » 11/09/12 23:35

Per cominciare mi dici in quale cartella di lavoro si trova la Sub aggr, e con quale procedura avvii tale macro (un pulsante, un evento, oppure ???).

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

Re: [Excel 2010] Ricerca verticale personalizzata

Postdi alex_lougher » 12/09/12 19:51

si trova in "Foglio codifica Nuovo.xlsm" , in un modulo, la macro si avvia sia tramite pulsante, sia tramite combinazione da tastiera(CTRL+g), in entrambi i casi se insieme al mio "Foglio codifica Nuovo.xlsm" ho aperto altri file Excel da problemi di tempo per l'esecuzione della macro.
Aspetto tue notizie, grazie mille per l'interessamento!
alex_lougher
Utente Junior
 
Post: 22
Iscritto il: 06/07/12 09:25

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "[Excel 2010] Ricerca verticale personalizzata":


Chi c’è in linea

Visitano il forum: Nessuno e 94 ospiti