Ricerca con più parametri
Hai un problema con Excel? 
Ricerca con più parametri
di miotz (utente non iscritto) data: 04/12/2012 19:28:31
Ciao a tutti!
Vi posto questo quesito: ho un foglio "timereport" con una serie di record, i campi sono i seguenti:
mese | cliente | servizio | attività | numero fattura
su questo elenco vengono registrate a mano giorno dopo giorno le attività eseguite per il singolo cliente, che vengono poi recuperate nel momento della fatturazione. Il campo numero fattura è vuoto e viene compilato (a mano) con il numero della fattura nella quale la specifica riga di attività è confluita. Come è possibile automatizzare questa procedura? Aggiungo ulteriori dettagli: su un altro foglio "stampa", che ha il layout della fattura, scrivo il nome del cliente, il mese, la tipologia di servizio e il numero della fattura, vorrei che quest'ultimo venisse riportato nel foglio "timereport" in corrispondenza delle attività che hanno: il campo numero fattura vuoto, il cliente = al nome che ho indicato nel foglio "stampa", il mese = al mese indicato nel foglio "stampa" e idem per il servizio.
Sono riuscito a fare un'operazione simile eseguendo la ricerca su un solo campo utilizzando questo (pezzo) di codice qui
With Worksheets("vendite").Range("b1:b100")
Set c = .Find(ActiveSheet.Range("M4").Value, LookIn:=xlValues)
(..etc)
ma su più campi non ho proprio capito come si può fare.
Un grazie anticipato a tutti!
di Vecchio Frac data: 05/12/2012 22:12:45
Non riesco a capirti.
Qual è la procedura che vorresti automatizzare?
Quali sono questi campi multipli su cui effettuare una ricerca? e cosa si deve ricercare?
Se puoi allega un file con dati fittizi.
di miotz (utente non iscritto) data: 10/12/2012 14:50:49
Ciao Vecchio Frac e grazie per l'attenzione. Ho inserito il file dove vedi il foglio dei dati "timereport" che aggiorno quotidianamente. Oltre a questo c'è un altro foglio che serve per stampare la fattura, ovvero ha un layout apposito, e una tabellina a fianco dove seleziono cliente, mese di riferimento, tipo di servizio, e il corpo della fattura si popola con gli importi che legge e somma dal foglio "timereport".
Il passo successivo lo eseguo a mano e vorrei capire se si riesce ad automatizzare, ed è questo: una volta fatta la fattura al cliente Gamma indico a mano sulla colonna A il numero di fattura nella quale l'attività corrispondente è confluita. Nel caso di specie nella fattura numero 12 è confluito l'importo relativo alla compilazione di un intrastat, attività che fa parte del servizio "contabilità". Qui nell'esempio è stata fatturata una sola riga ma naturalmente una stessa fattura può raggruppare gli importi originati da più righe del foglio "timereport".
Questa fase è quella che vorrei automatizzare, considerando che in un foglio successivo io già indico i valori utili per eseguire la selezione delle righe a fianco delle quali scrivere il numero della fattura in cui le stesse sono confluite.
Spero di essere stato abbastanza chiaro mi rendo conto che per iscritto non è affatto semplice rendere il quesito..!
di Textomb data: 10/12/2012 15:42:42
non ho visto il file allegato ma mi pare che il quesito posto sembra simile a quello che ho affrontato un pò di tempo fa...
Se ricorri all'utilizzo dei filtri ti togli dall'impiccio.
Nei criteri di selezione inserisci i campi che ti servono e poi il gioco è fatto.
un qualcosa del genere...
Ovviamente lo devi adattare alle tue esigenze.
Dim Mese as string, Cliente as String, Servizio as String, Attivity as string
Mese = Worksheets("Stampa").[M4]
Cliente = Worksheets("Stampa").[M5]
Servizio = Worksheets("Stampa").[M6]
Attivity = Worksheets("Stampa").[M7]
with Worksheets("Vendite").Range("b1:b100")
.AutoFilter field:=1, Criteria1:=Mese, Operator:=xlFilterValues
.AutoFilter field:=2, Criteria1:=Cliente, Operator:=xlFilterValues
.AutoFilter field:=3, Criteria1:=Servizio, Operator:=xlFilterValues
.AutoFilter field:=4, Criteria1:=Attivity, Operator:=xlFilterValues
End with
|
di miotz (utente non iscritto) data: 11/12/2012 19:09:07
Textomb l'idea dei filtri è buona ma Autofilter gestisce max 2 criteri - me lo confermi?
A me ne servirebbe gestirne 3...
di Textomb data: 12/12/2012 18:09:26
L'AutoFilter gestisce due criteri su ogni campo colonna.
A me è sembrato di capire che le colonne che devi filtrare sono quattro diverse.
Colonna 1: Mese, Colonna 2: Cliente, Colonna 3: Servizio, Colonna 4: Attivity
Quindi, se è così, non hai nessun problema.
Guarda il codice che ti ho scritto nel precedente post.
Io uso spesso questa metodologia ed oltre ad essere veloce ed efficace è anche abbastanza semplice-
di miotz data: 13/12/2012 15:21:40
eh purtroppo non è così
nel campo Mese considero gli ultimi tre mesi quindi ho 3 condizioni su questo campo, come pure sul campo servizio, per il quale anche qui in fase di sviluppo del file ho tenuto la possibilità di indicare max 3 tipologie di servizi.
di Albatro54 (utente non iscritto) data: 13/12/2012 17:52:23
questo codice dovrebbe fare quello che chiedi.
Adattalo alle tue esigenze.
Ciao
Albatros54
Sub FILTRA_MULTI_VBA()
ur = Range("a65536").End(xlUp).Row
Dim Cerco1, Nome As String
Dim Cerco2, Citta As String
Dim Cerco3
Dim Totale As Double
Dim Q As Integer
Cerco1 = InputBox("SCRIVI IL NOME DA CERCARE O PARTE DEL NOME")
If Cerco1 = "" Then Exit Sub
Cerco2 = InputBox("SCRIVI IL NOME DELLA CITTA' O PARTE DEL NOME")
If Cerco2 = "" Then Exit Sub
Cerco3 = InputBox("SCRIVI LA CIFRA CHE TI INTERESSA")
If Cerco3 = "" Then Exit Sub
Nome = "*" & Cerco1 & "*"
Citta = "*" & Cerco2 & "*"
Totale = 0
For Q = 2 To ur
If Cells(Q, 1).Value Like Nome And Cells(Q, 2).Value Like Citta And Cells(Q, 3).Value >= CDbl(Cerco3) Then
Rows(Q).Hidden = False
Totale = Totale + Cells(Q, 3)
Else
Rows(Q).Hidden = True
End If
Next
MsgBox "IL TOTALE PER " & UCase(Cerco) & " di € " & Format(Totale, "#,###.00")
End Sub
|
di Vecchio Frac data: 13/12/2012 18:17:36
Il codice postato da Albatro54 è buono, ma faccio notare solo due piccole imprecisioni:
- se l'utente ha una versione di Excel superiore alla 2003 la riga
ur = Range("a65536").End(xlUp).Row
può produrre un risultato errato, perchè da Excel 2007 in su le righe sono molte di più; userei al suo posto la versione generica:
ur = Columns(1).cells.count
- "cerco" non è definito da nessuna parte, per cui
MsgBox "IL TOTALE PER " & UCase(Cerco) & " di € " & Format(Totale, "#,###.00")
non produrrà un messaggio corretto (volevi indicare forse "cerco1"?) e anzi produce errore se è impostato Option Explicit (cosa raccomandabile sempre, anche per scovare piccolezze come questa).
di Albatros54 (utente non iscritto) data: 13/12/2012 18:24:49
Non volevo dare la soluzione completa, ma bensi' indirizzare il nostro amico a risolvere il problema.
Naturalmente, masticando un po di VBA il codice si puo adattare alle proprie esigenze.
Ciao
Albatros54
Vuoi Approfondire?