Estrazione dati da tabella Excel
Hai un problema con Excel? 
Estrazione dati da tabella Excel
di gbadalotti data: 12/09/2013 12:22:15
Salve a tutti,
mi scuso anticipatamente per eventuali gaff ma è la prima volta che partecipo ad un forum.
Partendo dal presupposto che purtroppo ho scarse conoscenze di vba (a dire la verità più nulle che scarse), sono circa quattro giorno che ci lavoro e con CERCA.VERT sono riuscito ad ottenere un risultato che però non è ciò che mi serve in quanto mi rende sono un singolo dato della tabella, ora però mi trovo alle strette.
In pratica devo predisporre un documento Excel composto da più fogli in cui nel primo foglio (chiamato "Home") un utente inserisce una data manualmente nella cella D8 impostata con formato GG/MM/AAAA e in automatico Excel deve interrogare i fogli successivi chiamati F01;F02.. fino a F100.
I fogli F0x hanno le seguenti colonne:
Range di Ricerca: Da A4 ad A150
Colonna A (Colonna da Interrogare): DATA SCADENZA FATTURA (in formato GG/MM/AAAA, alcune celle della colonna possono restare vuote)
Colonna B: NOME DEL FORNITORE (in formato GENERALE, alcune celle della colonna possono restare vuote)
Colonna C: NUMERO DOCUMENTO (in formato GENERALE, alcune celle della colonna possono restare vuote)
Colonna D: DATA FATTURA (in formato GG/MM/AAAA, alcune celle della colonna possono restare vuote)
Colonna E: IMPORTO (in formato NUMERO, alcune celle della colonna possono restare vuote)
Colonna F: DATA PAGAMENTO (in formato GG/MM/AAAA, alcune celle della colonna possono restare vuote)
In pratica l'interrogazione della Colonna A deve determinare in caso di corrispondenza con la data inserita dall'utente la copia di tutte le prime 5 celle orizzontali senza fermarsi al primo risultato ma verificando ed estraendo i risultato da tutti i fogli. I risultati dovranno essere riportati nel foglio principale chiamato "Home" a partire dalla cella F10.
Es: se nel foglio F01 in A4 viene rilevata la data corrispondente verranno copiate le celle A4,B4,C4,D4,E4,F4 la ricerca passsa automaticamente alla riga successiva ...
Forse mi sono dilungato un pò troppo..
Ringrazio tutti coloro che mi risponderanno
Gabriele
di Grograman data: 12/09/2013 12:29:37
Cit: "I fogli F0x hanno le seguenti colonne:"
Ho perso interesse a questa frase non avendo visto un file di esempio allegato
di totygno71 (utente non iscritto) data: 12/09/2013 14:10:48
@ gabriele
Se hai un file di esempio allegalo cosi rendi piu "probabile" che qualcuno ti risponda vista la complessità dello scenario proposto e ricostruirlo per poterti rispondere porta via tempo prezioso.
Ciauz
di gbadalotti data: 12/09/2013 14:42:39
Scusatemi, ho visto solo ora come caricare i file.
Ho caricato il doc.
Grazie
Gabriele
di Grograman data: 12/09/2013 15:05:51
Ti ho allegato un esempio di cui riporto il codice, non ho previsto controlli su esistenz anome fornitore e in mancanza di un esempio pratico copia tutte le celle dove trova la data riportata!
Sub Scopiazzo()
Dim wb As Workbook
Dim ws As Worksheet, ws2 As Worksheet
Dim x As Long, i As Long, k As Long
Dim dtChk As Date
Set wb = ThisWorkbook
Set ws = wb.Sheets("Home")
With ws
x = IIf(.Range("F" & .Rows.Count).End(xlUp).Row < 10, 10, .Range("F" & .Rows.Count).End(xlUp).Row) + 1
dtChk = .Range("D8")
For Each ws2 In wb.Worksheets
With ws2
If .Name <> ws.Name Then
i = .Range("F" & .Rows.Count).End(xlUp).Row
For k = 2 To i
If .Cells(k, 1) = dtChk Then
.Range(.Cells(k, 1), .Cells(k, 6)).Copy ws.Cells(x, 6)
x = x + 1
End If
Next k
End If
End With
Next ws2
End With
Set ws = Nothing
Set wb = Nothing
End Sub |
di gbadalotti data: 12/09/2013 16:13:56
Grazie !!!
il codice fa proprio quello che mi server !!!!
Manca solo un dettaglio, dalla seconda interrogazione tutti i risultati li accoda ai precedenti invece di cancellarmi i risultati precedenti e presentarmi quelli nuovi.
Grazie ancora
Gabriele
di Grograman (utente non iscritto) data: 12/09/2013 16:18:26
cit: "dalla seconda interrogazione tutti i risultati li accoda ai precedenti "
Lo so ^_^
di gbadalotti data: 17/09/2013 16:47:44
Scusate,
negli ultimi giorni sono stato preso dal lavoro e non ho potuto dedicare il tempo che avrei voluto a quanto in sospeso.
Alla fine comunque ho ottenuto il risultato voluto evitando l'accodamento dei risultati, cosa che invece accadeva precedentemente.
Allego il codice conscio che sicuramente è suscettibile di notevoli migliorie.
Ringrazio tutti per l'aiuto, la disponibilità e la simpatia dimostrata
Gabriele
Sub LeggiDati()
Dim wb As Workbook
Dim ws As Worksheet, ws2 As Worksheet
Dim x As Long, i As Long, k As Long
Dim dtChk As Date
Set wb = ThisWorkbook
Set ws = wb.Sheets("Home")
Sheets("Home").Select
Range("F:K").ClearContents
Range("F10").Select
With ws
x = IIf(.Range("F" & .Rows.Count).End(xlUp).Row < 10, 10, .Range("F" & .Rows.Count).End(xlUp).Row)
dtChk = .Range("D8")
For Each ws2 In wb.Worksheets
With ws2
If .Name <> ws.Name Then
i = .Range("F" & .Rows.Count).End(xlUp).Row
For k = 2 To i
If .Cells(k, 1) = dtChk Then
Range(.Cells(k, 1), .Cells(k, 6)).Copy ws.Cells(x, 6)
x = x + 1
End If
Next k
End If
End With
Next ws2
End With
Set ws = Nothing
Set ws2 = Nothing
Set wb = Nothing
End Sub |
Vuoi Approfondire?