Ricerca dati ed evidenzia
Hai un problema con Excel? 
Ricerca dati ed evidenzia
di visma (utente non iscritto) data: 17/12/2012 22:59:40
Ciao a tutti rieccomi con un altro problema
allego file vorrei effettuare sul foglio storico una ricerca di un dato qualsiasi nell'esempio H 1399
una volta trovato ricopiare automaticamente nel foglio analisi storico l'intera riga di dati ed evidenziare il dato cercato in questo caso riga 2 e riga 7 cella A2 G7
se cercassi esempio H 121 nello storico copia nel foglio analisi storico della riga 12 e 19
il dato da ricercare puo essere messo in a1 o nella prima riga in un userform ancora meglio
Grazie visma
di HarryBosch data: 18/12/2012 01:44:49
Ciao Visma
più che una Userform, la richiesta del valore da ricercare si potrebbe attuare con un Inputbox. Ti riallego un esempio di come si potrebbe sfruttare il "FIND" quando la ricerca trova più elementi.
Puoi richiamare la macro con CTRL + r (che ovviamente puoi modificare a piacere):
- apparirà l'Inputbox che ti chiederà il valore da ricercare
- se la ricerca è fruttuosa le righe verranno riportate nel foglio Analisi e verrà evidenziato il valore trovato
Ti ho inserito anche i commenti; posto il codice anche qua sotto a beneficio di tutti.
Option Explicit
Sub ricerca()
Dim valore As Variant
Dim conta As Integer, i As Integer
Application.ScreenUpdating = False
riprova:
'chiedo l'inserimento di un valore tramite Inputbox
valore = InputBox("inserisci il valore da cercare")
'se premo Annulla esco
If StrPtr(valore) = 0 Then Exit Sub
'se non inserisco nulla, avviso e ripeto la ricerca
If valore = "" Then
MsgBox "Inserisci un valore prima di eseguire la ricerca"
GoTo riprova
End If
'se ho inserito un valore calcolo quante volte appare nella tabella
conta = WorksheetFunction.CountIf([a2].CurrentRegion, valore)
'se il risultato è 0 significa che il valore non è stato trovato ed esco
If conta = 0 Then
MsgBox "Il valore """ & valore & """ non è stato trovato"
Exit Sub
End If
'altrimenti attivo il primo valore trovato
Cells.Find(valore).Activate
'nel foglio Analisi cancello valori e colorazioni precedenti
With Sheets("Analisi Storico")
.Cells.ClearContents
.Cells.Interior.ColorIndex = 0
'copio l'intera riga trovata nel foglio Analisi ed evidenzio il valore cercato
Rows(ActiveCell.Row).Copy Destination:=.Cells(1, 1)
.Cells(1, ActiveCell.Column).Interior.ColorIndex = 6
'proseguo con la ricerca, per tutti i valori trovati meno quello (-1) che abbiamo appena copiato
'se trovo un solo valore il ciclo non partirà (da 1 a 0 !)
For i = 1 To conta - 1
Cells.FindNext(ActiveCell).Activate
Rows(ActiveCell.Row).Copy Destination:=Sheets("Analisi Storico").Cells(i + 1, 1)
.Cells(i + 1, ActiveCell.Column).Interior.ColorIndex = 6
Next
'seleziono il foglio Analisi
.Select
End With
Application.ScreenUpdating = True
End Sub
|
di visma (utente non iscritto) data: 18/12/2012 19:21:20
Be intanto un grazie per la soluzione
nel file allegato funziona tutto alla perfezione ma quando lo incorporo nel
file che sto usando mi da errore
Cells.Find(valore).Activate
dove sbaglio
Grazie visma
di visma (utente non iscritto) data: 19/12/2012 12:19:19
Ciao a tutti allego un file dove si puo vedere l'errore
se cerco 4856 A2 tutto ok
ma se cerco ad esempio 20 mi dice nessun dato
Grazie visma
di Vecchio Frac data: 19/12/2012 15:20:26
Ti allego il codice di Harry con una piccola modifica, che serve sia a tener conto del problema che hai riscontrato, sia per non copiare due volte la stessa riga (se cerchi "20" viene riportata due volte la stessa riga perchè il valore 20 compare in due celle diverse, ma credo che a te basti riportare solo un risultato).
L'ultimo errore saltava fuori per via delle colonne vuote in questo punto:
conta = WorksheetFunction.CountIf([a2].CurrentRegion, valore)
che ho modificato così:
conta = WorksheetFunction.CountIf([a2].EntireRow, valore)
Inoltre ho eliminato quel "Goto riprova" che non mi piaceva per niente ^_^
Sub ricerca()
Dim valore As Variant
Dim conta As Integer, i As Integer, ri As Long
Application.ScreenUpdating = False
'chiedo l'inserimento di un valore tramite Inputbox
Do
valore = InputBox("inserisci il valore da cercare")
'se premo Annulla esco
If StrPtr(valore) = 0 Then Exit Sub
'se non inserisco nulla, avviso e ripeto la ricerca
If Trim(valore) = "" Then MsgBox "Inserisci un valore prima di eseguire la ricerca"
Loop Until Trim(valore) <> ""
'se ho inserito un valore calcolo quante volte appare nella tabella
conta = WorksheetFunction.CountIf([a2].EntireRow, valore)
'se il risultato è 0 significa che il valore non è stato trovato ed esco
If conta = 0 Then
MsgBox "Il valore """ & valore & """ non è stato trovato"
Exit Sub
End If
'altrimenti attivo il primo valore trovato
Cells.Find(valore).Activate
'nel foglio Analisi cancello valori e colorazioni precedenti
With Sheets("Analisi Storico")
.Cells.Clear
'copio l'intera riga trovata nel foglio Analisi ed evidenzio il valore cercato
Rows(ActiveCell.Row).Copy Destination:=.Cells(1, 1)
.Cells(1, ActiveCell.Column).Interior.ColorIndex = 6
ri = ActiveCell.Row
'proseguo con la ricerca, per tutti i valori trovati meno quello (-1) che abbiamo appena copiato
'se trovo un solo valore il ciclo non partirà (da 1 a 0 !)
For i = 1 To conta - 1
Cells.FindNext(ActiveCell).Activate
If ri <> ActiveCell.Row Then
Rows(ActiveCell.Row).Copy Destination:=Sheets("Analisi Storico").Cells(i + 1, 1)
.Cells(i + 1, ActiveCell.Column).Interior.ColorIndex = 6
ri = ActiveCell.Row
End If
Next
'seleziono il foglio Analisi
.Select
End With
Application.ScreenUpdating = True
End Sub |
di visma (utente non iscritto) data: 19/12/2012 18:32:20
Grazie davvero mi si ripresenta un errore (allego file) valore non trovato un numero qualsiasi del foglio
per quanto riguarda la ricerca esempio K 100 M dovrei copiare tutte le righe da 12 a 22 per sapere in quante righe dello storico si presentano
con lo stesso valore
Grazie del vostro tempo visma
di HarryBosch data: 19/12/2012 19:12:09
Però credo che Visma voglia controllare i valori su tutta la tabella e non su una riga.
Con il primo codice che avevo inserito, in effetti se il numero ricercato appariva più volte sulla stessa riga, quest'ultima veniva copiata più volte.
Ho apportato alcune correzioni:
- ho tenuto la modifica di VecchioFrac che ha giustamente eliminato quell'orribile Goto ^_^
- ho modificato il CurrentRegion, perché non si capisce bene se la tabella è unita o se hai delle colonne vuote in mezzo, visto che hai postato due file con diversa strutturazione.. ho inserito un range che va dalla colonna A:AH eventualmente da modificare a seconda dell'ultima colonna utilizzata
- ho aggiunto un Trim quando ricerchi il valore inserito: questo perché se inavvertitamente inserivi degli spazi prima o dopo, la ricerca ti generava un errore
ps: comunque la ricerca del 20 a me dava esito positivo :)
Prova adesso con l'allegato 5
di HarryBosch data: 19/12/2012 19:15:48
Chiedo venia a VecchioFrac: aveva già sistemato quanto ho detto, sia con il trim, sia con il controllo del doppione! ^_^
Mi sono accorto adesso di aver ripreso un codice precedente, e non l'ultimo che ti aveva postato
di visma (utente non iscritto) data: 19/12/2012 19:26:43
Sono ansioso di provarlo ma non vedo l'allegato 5
Grazie visma
di HarryBosch data: 19/12/2012 19:38:10
Scusa... ecco qua.
Purtroppo in questi giorni non riesco a seguire le discussioni, con il lavoro sono impegnatissimo (e per fortuna direi, visti i tempi che corrono).
Non cambia niente dal codice di VecchioFrac se non per la selezione della tabella da controllare.
di visma (utente non iscritto) data: 19/12/2012 21:09:21
Ciao a tutti scusatemi ma continuo con i problemi
il file allegato risponde a come dovrebbe essere la struttura dello storico fino a circa DA
ricopiando il codice che nell'allegato 5 con dati fittizzi funziona perfettamente qua non va
forse (anzi sicuramente commetto qualche errore che non riesco a individuare)
mi dice che il dato cercato non esiste scusate se vi rubo del tempo
concordo con HarryBosch (visto i tempi che corrono) avere un lavoro che ci impegna tantissimo è una fortuna
Grazie visma
di HarryBosch data: 20/12/2012 02:11:18
Mi sa che è sparito un pezzo del tuo ultimo commento ^_^
E non devi scusarti: se qualcosa non funziona ti invito io stesso a chiedere, perché la mia/nostra soddisfazione è risolvere il thread :)
Dunque, il codice funziona con il file che alleghiamo, ma se lo riporti nel tuo file qualcosa non torna.
L'unica cosa che mi viene da pensare, è che il range di ricerca, cioè la tabella con tutti i dati, abbia dei riferimenti diversi; per esempio nell'ultimo allegato la ricerca si eseguiva nell'intervallo A1:AH, fino all'ultima riga determinata dalla colonna AH: se però questa è vuota ti esce un messaggio che il valore non è stato trovato.
Set rng = Range("a1:ah" & Cells(Rows.Count, "ah").End(xlUp).Row)
conta = WorksheetFunction.CountIf(rng, valore)
Nel primo codice avevo utilizzato il CurrentRegion, che però non va bene se hai delle colonne vuote nel mezzo:
conta = WorksheetFunction.CountIf([a2].CurrentRegion, valore)
Nel tuo file originale come sono i riferimenti della tabella Storico?
di visma (utente non iscritto) data: 20/12/2012 11:02:51
Grazie per la disponibilita (mi sono comprato un libro perchè non serve solo la pappa pronta ma cerco di capire
proprio come risolvete il problemi)
il foglio storico è strotturato in questo modo esempio
colonna A codice pezzo univoco es. 56486
colonna D tipo di lavorazione es. K 142 M
colonna G tipo di materiale es. hrtye
colonna J altro tipo es. F 281 M
e così via continuando ad aggiungere lavorazioni lo storico diventa molto lungo
quindi se cerco es. lavorazione F 102 M risposta riga 4 e 5 con i relativi parametri quindi tutta la riga da copiare
la lunghezza dello storico puo variare a seconda de casi
la colonna N es. riporta il totale di L+M (le formule sono state tolte perchè prendevano dati da altri fogli)
quindi alcune colonne es. L e M dovrebbero essere nascoste
spero di essere stato chiaro
Grazie visma
allego file storico7
di HarryBosch data: 21/12/2012 01:15:48
Come avevo pensato: l'errore, ovvero la ricerca nulla, avviene perché non si controlla il giusto intervallo, proprio come ti avevo spiegato nel mio ultimo intervento.
Ci sono delle colonne vuote che impediscono l'uso del Current Region e la colonna "AH", inserita come riferimento nell'ultimo codice, è vuota.
Ok, vedi il file "storico-8" e vedrai che stavolta funziona.
In sostanza controllo l'ultima cella dell'intero foglio, tenendo come ultima colonna di ricerca AH (eventualmente da sostituire).
di visma (utente non iscritto) data: 21/12/2012 15:24:34
Grazie 1000 HarryBosch funziona alla perfezione senza nessun intoppo
ringrazio anche Vecchio Frac e vi auguro buone feste
Visma
¨¨¨¨¨¨¨¨¨. *
¨¨¨¨¨¨¨¨¨ **
¨¨¨¨¨¨¨¨¨*o*
¨¨¨¨¨¨¨¨*♥*o*
¨¨¨¨¨¨¨***o***
¨¨¨¨¨¨**o**♥*o*
¨¨¨¨¨**♥**o**o**
¨¨¨¨**o**♥***♥*o*
¨¨¨*****♥*o**o****
¨¨**♥**o*****o**♥**
¨******o*****♥**o***
****o***♥**o***o***♥ *
¨¨¨¨¨____!_!____
¨¨¨¨¨_________/¨¨
di HarryBosch data: 21/12/2012 16:17:46
Sono stupito!
Ho visto spesso questi effetti costruiti con i caratteri ma non mi sono mai cimentato nella realizzazione... bellissimo ^_^
Buone feste anche a te... a presto
Vuoi Approfondire?