Risolto Elaborazione dati, file con 365 schede estrapolare solo quello che mi interessa

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
Buongiorno,
Ho un file contenente 365 schede, una per ogni giorno dell'anno, all'interno di ogni scheda sono presenti molti dati, vorrei creare una ulteriore scheda "sintesi" in cui di fianco ad ogni giorno vengano estratto solo alcuni dati di cui mi interessa dalla scheda apposita.
Allego esempio.
Immagino che sia fattibile solo con Vba di cui non sono molto pratico, nel caso contrario ancora meglio.
Grazie!!!
 

Allegati

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
Premessa: i campi che mi interessano sono:
Se compare un numero (no alfanumerico) nella colonna A di ogni scheda, quello è il valore che voglio nella scheda sintassi e il campo di fianco ad esso nella colonna B
Se fosse anche possiibile inserire i Kg che si trovano sempre X righe sotto al numero presente nella colonna A, quando compare la voce "Totale Centro di Costo" nella colonna F.
Dall'esempio allegato si dovrebbe capire meglio
 

klingklang

Ciappinaro VBA_Expert
Expert
20 Ottobre 2017
4.157
113
42
San Giovanni in Persiceto (BO)
www.excelswissknife.com
2016, 365
284
Ciao. Se non c'è qualche elemento (e a una prima occhiata non mi pare che ci sia) che identifica univocamente quali sono le righe da cui estrarre i dati del foglio (perché immagino che ogni foglio avrà un numero di righe variabile), non c'è formula o linguaggio al mondo che possa venirti in aiuto. Purtroppo i tuoi dati sono strutturati in modo tale da renderli estremamente ostici, se non impossibili, da elaborare.

EDIT: col messaggio #2 se non altro hai dato qualche coordinata che può essere utile per costruire una macro. Resta comunque il consiglio di rivedere dall'inizio il data entry, perché con questa struttura ti cerchi guai
 

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
eh purtroppo è un copia incolla di un software di gestione spalmato su ogni giorno in un file excel non ho modo di modificare la sintassi di ogni singola scheda... confido in un vostro aiuto, al limite potrei cancellare tutto tranne quello che mi serve da ogni scheda ma in questo modo impiegherei molto tempo senza sapere poi se il riepilogo è comunque fattibile.
 

klingklang

Ciappinaro VBA_Expert
Expert
20 Ottobre 2017
4.157
113
42
San Giovanni in Persiceto (BO)
www.excelswissknife.com
2016, 365
284
Beh, allora potresti iniziare da qui:

Con questo strumento puoi fare in un secondo un foglio riepilogativo con i dati di tutti i 365 fogli accodati, e la prima colonna che riporta il nome del foglio da cui provengono (e quindi implicitamente la data). Fatto questo, forse riesci nel tuo intento persino con dei filtri, ma anche una macro sarebbe molto più facile da scrivere, dovendo lavorare su un solo foglio con già tutti i dati presenti.

Fammi sapere
 

Powerwin

VBA Expert
Expert
17 Marzo 2016
3.782
63
vicino a Milano
2019
56
Quei dati sono veramente terribili, non posso pensare che esista un gestionale che "spara" fuori dati in quel modo, a mio parere c'è il tocco di una "mano sapiente"

p.s. i gestionali solitamente esportano nei formati comuni (.csv, .txt o altro) ma mai in quel modo
 

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
Si sicuramente, ma non ho modo di interpellare chi ha fatto il software e di sicuro non glielo farei modificare per il mio file..
Comnque sia stavo pensando se creo un foglio, tipo indice in cui sono presenti i codici che mi interessano e poi faccio una specie di cercavert su tutti i fogli è possibile? logicamente facendolo fare ad una macro?? Se scrivo caxxate ditemelo pure ;))
 

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
Ok, ho cercato di semplificafre le operazioni:
mi incollo manualmente per ogni scheda il valore in Kg di fianco alla cella del numero e della stringa di testo voluti, ho creato un indice dei parametri da ricercare su ogni scheda.
In questo modo è più facile creare una macro che cerchi i campi presenti nell'indice su ogni scheda e una volta che li ha trovati incolli o le tre caselle volute o l'intera riga di fianco al giorno corrispondente nella scheda sintesi?
ho notato che il riferimento del giorno ad ogni scheda oltre ad essre nel nome della scheda è presente per tutti i fogli, nella cella Z11, la data il problema è che è scritta senza separatori (tutto attaccato..)
Grazie!!
Allego esempio
 

Allegati

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
scusate le mie continue retifiche, copiare e incollare il valore in kg di fianco alle celle che mi interessano è un lavoro troppo lungo?? si riesce a farlo in automatico?? ;)
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.842
113
Como
2011MAC 2016WIN
353
Ciao,
stavo guardando il tuo ultimo file in cui ci sono 4 fogli, ma cosa bisogna fare esattamente?
 

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
Ciao Ges, allora il file è un fac simile dell'originale, in quello su cui lavoro ogni scheda contiene le produzioni giornaliere della mia azienda, mi piacerebbe inserire un foglio all'inizio di sintesi, composto da una colonna contenente tutte le date, nella colonna di fianco,quindi per il giorno di riferimento, vorrei inserire dalla scheda apposita solo i dati che mi interessano, che sono il codice numerico, la descrizione (cella di fianco) e i Kg (questo parametro è un pò piu ostico perchè non compare di fianco al codice alla descrizione ma più in basso dopo x righe. Cosi per tutti i giorni, per ovviare al problema dei kg ho pensato di copiare e incollare il valore vicino alla descrizione (anche se un processo manuale veramente lungo... ma se non c'è soluzione farò cosi). Tutto questo per ogni giorno, se può servire all'interno di ogni scheda "giorno" è sempre presente nella casella Z21 la data (scritta senza separatori..)
 

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
Con una semplice formula del tipo =SE.ERRORE((CERCA.VERT(D$2;'02_01_18'!$A$2:$C$213;3;FALSO));"-") sono riuscito a fare più o meno quello che volevo, il problema è che devo sostituire il nome della scheda ('02_01_18') per ogni formula con il nome esatto della scheda e inoltre non mi piace vedere la casella con il "-" o vuota se non esiste il campo nella scheda, visto che i codici (508608...etc) non si limitano a quelli che ho postato ma sono tanti e quindi non risulta comprensibile a prima vista l'elenco giornaliero.... non sò se mi sono spiegato bene...
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.842
113
Como
2011MAC 2016WIN
353
Vediamo se ho capito, prova con questa macro
Visual Basic:
Sub trova_e_copia()
    Dim intervallo As Range
    Dim sh As Worksheet
    Dim Fg As Integer
    Dim j As Long
    Dim x As Integer
    Set sh = Worksheets("sINTESI")
    Application.ScreenUpdating = False
    For Fg = 1 To Sheets.Count
        uR = sh.Cells(Rows.Count, 2).End(xlUp).Row
        For j = 9 To uR
            If Left(sh.Cells(j, 2), 2) = Left(Sheets(Fg).Name, 2) Then
                If Sheets(Fg).Name <> "sINTESI" Then
                    On Error Resume Next
                    Set intervallo = Sheets(Fg).Range("A:A").SpecialCells(xlCellTypeConstants)
                    x = 3
                    For Each CL In intervallo
                        If IsNumeric(CL) Then
                            CL.Resize(, 3).Copy
                            sh.Cells(j, x).PasteSpecial Paste:=xlValues
                            x = x + 4
                        End If
                    Next
                End If
            End If
        Next
    Next
    Application.ScreenUpdating = True
    MsgBox "Fatto!", vbInformation, "NOTIFICA"
End Sub
Mi sono basato sull'ultimo esempio che hai allegato
 
  • Like
Reactions: klingklang

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
Buongiorno Ges, allora ho provato sul file originale, purtroppo non trova corrispondenza la data con i dati che vengono estratti. Nel caso poi in cui una scheda sia vuota, vengono copiati i dati del giorno precedente (mi sembra..)
Secondo mè comunque è quasi perfetta.. ci vuole solo qualche modifica vba.. solo che io non son capace ho provato ad interpretare il codice e già non capisco come hai fatto a dirgli di confrontare il nome della scheda con la data...:ROFLMAO:
 

fvenz

Utente junior
27 Gennaio 2019
65
6
2016 pc
0
Se le schede giorno del mio file su cui si basa l'estrazione della macrio iniziano dalla 3 scheda, devo modificare il counter Fg che parta da 3 invece che 1? I
l mio file è cosi composto: prima scheda: calendario, seconda Sintesi dova la macro incolla i valori e terza scheda "01_01_18" foglio vuoto, poi "02_01_18" compilata....
 

ges

Excel/VBA Expert
Amministratore
Expert
21 Giugno 2015
18.842
113
Como
2011MAC 2016WIN
353
Ciao,
la variabile Fg parte dal 1 (primo foglio) e conta tutti i fogli presenti
Visual Basic:
For Fg = 1 To Sheets.Count
Ho previsto che escluda il foglio che hai chiamato "sINTESI"
Visual Basic:
 If Sheets(Fg).Name <> "sINTESI" Then
Se non ti interessa la ricerca nei primi due fogli puoi farla partire da 3

Per la macro io mi sono basato sul tuo file di esempio, sicuramente nel tuo file originale c'è qualcosa di diverso, comunque ti spiego la macro così puoi cercare di adattarla

Indico con la variabile oggetto "Intervallo" tutte le celle piene di ciascuna colonna A di ciascun Foglio (che il ciclo "spazzola" uno a uno.
Visual Basic:
Set intervallo = Sheets(Fg).Range("A:A").SpecialCells(xlCellTypeConstants)
Poi con un ciclo cerco nella colonna A
Visual Basic:
For Each CL In intervallo
 ... Next
Se trovo un numero
Visual Basic:
If IsNumeric(CL) Then
...
End If

Allora copia la riga corrispondente le prime colonne nel foglio Sh (cioè "sINTESI") incrementando di 4 le colonne poichè il successiovo numero che trova me lo deve copiare a lato
Visual Basic:
CL.Resize(, 3).Copy
sh.Cells(j, x).PasteSpecial Paste:=xlValues
x = x + 4
La variabile j è la corrispondente riga che soddisfa il criterio che i primi due numeri del foglio siano uguali ai primi due numeri dell'indice di ricerca del foglio "sINTESI", anche questo viene "spazzolato" uno a uno con un altro ciclo
Visual Basic:
 For j = 9 To uR
    If Left(sh.Cells(j, 2), 2) = Left(Sheets(Fg).Name, 2) Then
        ....
    End If
 Next j
Spero che dopo questa spiegazione sia più chiaro.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!