Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]- filtrare un dato di volta in volta in più colonne (Macro) Opzioni
aetio
Inviato: Wednesday, April 27, 2011 7:11:00 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
l'uomo delle tabelle colpisce ancora... :)) Cos’avrà mai ancora da chiedere questo rompiscatole?? ahahaha)
Vorrei automatizzare una serie di operazioni che attualmente vengono svolte manualmente. Il tutto non certo per pigrizia, ma perché dovendo essere svolte per parecchio tempo consecutivo e su diverse tabelle spesso generano quegli errori tipici del limite umano della manualità... le macchine, dopo essere state ben istruite, non sbagliano mai... Ecco di cosa si tratta:
ho una situazione di partenza come questa:



In riga 5 da col.C a col.G (tabella1) ho i codici che devo cercare. Per fare questo mi avvalgo dei filtri.
I dati che m’interessa ricavare dopo l’operazione di filtro sono quelli da col.AH a col.IA dalla prima riga utile della tabella filtrata fino alla sua ultima riga scritta.
Questi dati li copio di volta in volta usando una macro (copia_incolla2) che li accoda in foglio “Archivio”

Esempio pratico
Supponiamo che debba filtrare il cod.83 (cella E5):
1) Seleziono cella C4 > filtro > filtri per numero > pari a > 83
Ecco il risultato




2) Applico la macro

Code:
Sub copia_incolla2()
Uriga = Range("A" & Rows.Count).End(xlUp).Row
Set area = Range("AH5", Range("IA" & Uriga)).SpecialCells(xlCellTypeVisible)
Uriga = Sheets("Archivio").Range("B" & Rows.Count).End(xlUp).Row + 1
area.Copy Destination:=Sheets("Archivio").Cells(Uriga, 1)
End
End Sub


I dati filtrati vengono così copiati in “Archivio” partendo da A3




3) Cancello il filtro da col.C e ripeto le stesse operazioni in col.D-E-F-G, sempre alla ricerca del cod.83, sempre applicando poi la macro copia_incolla2 che posiziona in foglio Archivio i dati di volta in volta filtrati accodandoli a quelli precedenti.


Mi servirebbe una macro che, tramite una InputBox mi chieda il codice da cercare e partendo da col.C, riga 5, filtri di volta in volta il codice che scrivo nella InputBox in tutta la tabella1, applichi di volta in volta la macro copia_incolla2
Dialogo e sequenza:
Domanda: (InputBox) che codice cerchi? > Risposta: 83
Filtro cod. 83 in col.C > applico macro copia_incolla2
Tolgo filtro da col.C > Filtro cod. 83 in col.D > applico macro copia_incolla2
Tolgo filtro da col.D > Filtro cod. 83 in col.E > applico macro copia_incolla2
Tolgo filtro da col.E > Filtro cod. 83 in col.F > applico macro copia_incolla2
Tolgo filtro da col.F > Filtro cod. 83 in col.G > applico macro copia_incolla2
Fine

Doverosa specificazione: lo stesso dovrebbe fare se anziché il cod.83 di col.C io volessi ricavare i dati di cod.19 (G5):
Domanda: (InputBox) che codice cerchi? > Risposta: 19
Filtro cod. 19 in col.C > applico macro copia_incolla2
Tolgo filtro da col.C > Filtro cod. 19 in col.D > applico macro copia_incolla2
Tolgo filtro da col.D > Filtro cod. 19 in col.E > applico macro copia_incolla2
Tolgo filtro da col.E > Filtro cod. 19 in col.F > applico macro copia_incolla2
Tolgo filtro da col.F > Filtro cod. 19 in col.G > applico macro copia_incolla2
Fine

Spero di avere spiegato bene tutto
Grazie assai e buona giornata
eZio
Sponsor
Inviato: Wednesday, April 27, 2011 7:11:00 AM

 
a10n11
Inviato: Wednesday, April 27, 2011 10:03:00 AM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694
salve
Solo per conferma della richiesta:
Filtrare in sequenza le colonne C:G con un valore espresso nella Inputbox e copiare nel
foglio Archivio i valori filtrati da colonna AH:IA

Quella che segue è l'integrazione alla Copia_Incolla2

Sub Filtra()
Dim Num As Long
Sheets("foglio1").Select
If ActiveSheet.FilterMode = True Then
Selection.AutoFilter
End If
Range("C4:G4").Select
Num = InputBox("Numero da cercare", "Cerca Numero")
Selection.AutoFilter
For N = 1 To 5
Selection.AutoFilter Field:=N, Criteria1:=Num
Call copia_incolla2
Selection.AutoFilter Field:=N
Next N
Selection.AutoFilter
End Sub

Sub copia_incolla2()
Uriga = Range("A" & Rows.Count).End(xlUp).Row
Set area = Range("AH5", Range("IA" & Uriga)).SpecialCells(xlCellTypeVisible)
Uriga = Sheets("Archivio").Range("B" & Rows.Count).End(xlUp).Row + 1
area.Copy Destination:=Sheets("Archivio").Cells(Uriga, 1)
End Sub


PS.
nella macro copia_incolla2 che ci stava a fare quella istruzione "End" prima di End Sub ??
con quella istruzione si interrompe immediatamente l'esecuzione della macro.

saluti
Giap


aetio
Inviato: Wednesday, April 27, 2011 10:40:22 AM

Rank: AiutAmico

Iscritto dal : 5/10/2010
Posts: 723
Ciao,
il mio sbalordimento non ha limiti...!! in quattro righe (tempo impiegato per l'esecuzione della macro: nemmeno 2 sec.) hai sistemato il problema... Mi hai risolto un bel problema, sia di tempo, sia di pasticciacci...
Grazie infinite, mio immenso Angelo Custode... e buona giornata
eZio

p.s. scusa... l'End era un refuso delle 5:10 :))
copiando il testo della macro avevo pigliato dentro anche quell'End... che si riferiva all'istruz. End Sub
Ero tutto concentrato nel cercare di scrivere in modo chiaro... e con poche parole ;))
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.