Condividi tramite

Creare un riepilogo di dati estratti da numerosi file excel

Anonimo
2011-05-03T14:44:20+00:00

Buongiorno a tutti,

vi presento un problema che per una persona a digiuno di VB sembra impossibile.

Ho una raccolta di specifiche tecniche relative a dei prodotti, ottenute misurando dei campioni.

Per ciascun prodotto i dati sono conservati in un file .xls conservato in una differente sottocartella, secondo questo schema:

\percorso\Codice_prodotto\Nome_campione.xls

All'interno dei file excel i dati occupano sempre le stesse posizioni nel foglio "Nome Foglio":

Descrizione campione:      C8

Dato1:                              F17

Dato2:                              F21

Dato3:                              F25

Dato4:                              F29

Dato5:                              F33

Dato6:                              I17

Dato7:                              I21

Dato8:                              I25

Dato9:                              I29

Dato10:                            I33

Ho bisogno di riassumere queste informazioni in un nuovo file Excel (ad es. "Riepilogo.xls"), inserendo i dati di ciascun prodotto in una riga diversa che includa anche

"Codice_prodotto" (sottocartella in cui è il file originale) e

"Nome_campione" (il nome del file xls originale)   

Si può fare?

P.S. che si a digiuno di VB non vuol dire che non voglia imparare. Benvenuti i consigli su una buona guida introduttiva.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

  1. Anonimo
    2011-05-05T12:53:58+00:00

    L'unico inconveniente è che per ogni file analizzato (tra quelli che contengono i dati) mi chiede di salvare le modifiche.

    Si può aggiungere una riga di codice che ometta la richiesta e la imposti su NO in automatico?

    Un'ulteriore richiesta: è possibile inserire un controllo sul file di origine? ovvero se nella cella C15 trova la stringa "Prova a  0,05 m/s" procede con la copia dei dati, altrimenti salta il file.

    Grazie ancora,

    Francesco

    P.S. essendo anche un utilizzatore di Access mi risulterebbe molto comodo imparare ad utilizzare VB. Consigli per una guida introduttiva? Access l'ho imparato dalla guida di office e mi sono trovato bene, c'è qualcosa di simile?

    Se(se) ho capito:

    Public Sub m()

        Dim objFSO As Object

        Dim objFolder As Object

        Dim objFile As Object

        Dim objSubfolder As Object

        Dim colSubfolders As Object

        Dim sh As Worksheet

        Dim shMe As Worksheet

        Dim wk As Workbook

        Dim wkMe As Workbook

        Dim lRiga As Long

        Set objFSO = CreateObject("Scripting.FileSystemObject")

        Set objFolder = objFSO.GetFolder("C:\ProvaX")

        Set colSubfolders = objFolder.Subfolders

        Set wkMe = ThisWorkbook

        Set shMe = wkMe.Worksheets("Foglio1")

        With Application

            .ScreenUpdating = False

            .DisplayAlerts = False

        End With

        For Each objSubfolder In colSubfolders

            For Each objFile In objSubfolder.Files

                Set wk = Workbooks.Open(objSubfolder.Path & "" & objFile.Name)

                Set sh = wk.Worksheets("Foglio1")

                lRiga = shMe.Range("A" & shMe.Rows.Count).End(xlUp).Row + 1

                If shMe.Range("C5").Value = "Prova a  0,05 m/s" Then

                    With sh

                        shMe.Range("A" & lRiga).Value = .Range("C8").Value

                        shMe.Range("B" & lRiga).Value = .Range("F17").Value

                        shMe.Range("C" & lRiga).Value = .Range("F21").Value

                        shMe.Range("D" & lRiga).Value = .Range("F25").Value

                        shMe.Range("E" & lRiga).Value = .Range("F29").Value

                        shMe.Range("F" & lRiga).Value = .Range("F33").Value

                        shMe.Range("G" & lRiga).Value = .Range("I17").Value

                        shMe.Range("H" & lRiga).Value = .Range("I21").Value

                        shMe.Range("I" & lRiga).Value = .Range("I25").Value

                        shMe.Range("J" & lRiga).Value = .Range("I29").Value

                        shMe.Range("K" & lRiga).Value = .Range("I33").Value

                        shMe.Range("L" & lRiga).Value = objSubfolder.Name

                        shMe.Range("M" & lRiga).Value = objFile.Name

                    End With

                End If

                wk.Save

                wk.Close

                Set sh = Nothing

                Set wk = Nothing

            Next

        Next

        With Application

            .ScreenUpdating = True

            .DisplayAlerts = True

        End With

       Set objSubfolder = Nothing

       Set colSubfolders = Nothing

       Set objFile = Nothing

       Set objFolder = Nothing

       Set objFSO = Nothing

       Set shMe = Nothing

       Set sh = Nothing

       Set wk = Nothing

       Set wkMe = Nothing

    End Sub

    Anche Excel ha la sua guida vb. La sintassi Visual Basic è sempre la stessa, quella che cambia è la libreria degli oggetti.

    NOTA. Parte del codice utilizzato qui(leggere il file system di Windows) non è vb, ma vbscript.

    La risposta è stata utile?

    0 commenti Nessun commento

18 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2011-05-05T12:29:37+00:00

    Grazie mille,

    funziona benissimo ed è anche molto facile da personalizzare.

    Utilissimo anche il link. In effetti con VB non ho mai avuto a che fare.

    L'unico inconveniente è che per ogni file analizzato (tra quelli che contengono i dati) mi chiede di salvare le modifiche.

    Si può aggiungere una riga di codice che ometta la richiesta e la imposti su NO in automatico?

    Un'ulteriore richiesta: è possibile inserire un controllo sul file di origine? ovvero se nella cella C15 trova la stringa "Prova a  0,05 m/s" procede con la copia dei dati, altrimenti salta il file.

    Grazie ancora,

    Francesco

    P.S. essendo anche un utilizzatore di Access mi risulterebbe molto comodo imparare ad utilizzare VB. Consigli per una guida introduttiva? Access l'ho imparato dalla guida di office e mi sono trovato bene, c'è qualcosa di simile?

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2011-05-05T07:53:09+00:00

    Si, tutte le sottocartelle si trovano nello stesso percorso.

    C:\percorsocomune\

                                        Codice_prodotto1\Nome_campione1.xls

                                        Codice_prodotto2\Nome_campione2.xls

                                        Codice_prodotto3\Nome_campione3.xls

                                        ...........

    In ogni sottocartella sarà presente un unico file.

    Grazie,

    Francesco

    Questa macro dovrebbe fare quanto chiedi(vedi NOTA alla fine):

    Public Sub m()

        Dim objFSO As Object

        Dim objFolder As Object

        Dim objFile As Object

        Dim objSubfolder As Object

        Dim colSubfolders As Object

        Dim sh As Worksheet

        Dim shMe As Worksheet

        Dim wk As Workbook

        Dim wkMe As Workbook

        Dim lRiga As Long

        Set objFSO = CreateObject("Scripting.FileSystemObject")

        Set objFolder = objFSO.GetFolder("C:\ProvaX")

        Set colSubfolders = objFolder.Subfolders

        Set wkMe = ThisWorkbook

        Set shMe = wkMe.Worksheets("Foglio1")

        Application.ScreenUpdating = False

        For Each objSubfolder In colSubfolders

            For Each objFile In objSubfolder.Files

                Set wk = Workbooks.Open(objSubfolder.Path & "" & objFile.Name)

                Set sh = wk.Worksheets("Foglio1")

                lRiga = shMe.Range("A" & shMe.Rows.Count).End(xlUp).Row + 1

                With sh

                    shMe.Range("A" & lRiga).Value = .Range("C8").Value

                    shMe.Range("B" & lRiga).Value = .Range("F17").Value

                    shMe.Range("C" & lRiga).Value = .Range("F21").Value

                    shMe.Range("D" & lRiga).Value = .Range("F25").Value

                    shMe.Range("E" & lRiga).Value = .Range("F29").Value

                    shMe.Range("F" & lRiga).Value = .Range("F33").Value

                    shMe.Range("G" & lRiga).Value = .Range("I17").Value

                    shMe.Range("H" & lRiga).Value = .Range("I21").Value

                    shMe.Range("I" & lRiga).Value = .Range("I25").Value

                    shMe.Range("J" & lRiga).Value = .Range("I29").Value

                    shMe.Range("K" & lRiga).Value = .Range("I33").Value

                    shMe.Range("L" & lRiga).Value = objSubfolder.Name

                    shMe.Range("M" & lRiga).Value = objFile.Name

                End With

                wk.Close

                Set sh = Nothing

                Set wk = Nothing

            Next

        Next

        Application.ScreenUpdating = True

       Set objSubfolder = Nothing

       Set colSubfolders = Nothing

       Set objFile = Nothing

       Set objFolder = Nothing

       Set objFSO = Nothing

       Set shMe = Nothing

       Set sh = Nothing

       Set wk = Nothing

       Set wkMe = Nothing

    End Sub

    NOTA.

    1. Il codice va copia/incollato in un modulo standard del file dove vuoi il riepilogo.
    2. Modifica la path(percorso) della cartella principale(nell'esempio: C:\ProvaX) con la tua.
    3. Nel mio esempio i dati sono contenuti nei vari files in Foglio1
    4. I dati saranno riportati nel Foglio1 del file di riepilogo.
    5. Modifica eventualmente i nomi dei fogli con i tuoi
    6. Se hai molte sottocartelle, la procedura potrebbe richiedere molto tempo
    7. Se i nomi delle cartelle o dei files eccedono i 31 caratteri, hai un errore.

    Se non hai mai utilizzato il vb di Excel, vedi qui: http://www.maurogsc.eu/excel/xlsdoveinserirecodice.aspx

    Se hai problemi, siamo(quasi) sempre qui. Grazie per l'attenzione.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2011-05-05T06:34:14+00:00

    Si, tutte le sottocartelle si trovano nello stesso percorso.

    C:\percorsocomune\

                                        Codice_prodotto1\Nome_campione1.xls

                                        Codice_prodotto2\Nome_campione2.xls

                                        Codice_prodotto3\Nome_campione3.xls

                                        ...........

    In ogni sottocartella sarà presente un unico file.

    Grazie,

    Francesco

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2011-05-03T17:14:44+00:00

    Buongiorno a tutti,

    vi presento un problema che per una persona a digiuno di VB sembra impossibile.

    Ho una raccolta di specifiche tecniche relative a dei prodotti, ottenute misurando dei campioni.

    Per ciascun prodotto i dati sono conservati in un file .xls conservato in una differente sottocartella, secondo questo schema:

    \percorso\Codice_prodotto\Nome_campione.xls

    All'interno dei file excel i dati occupano sempre le stesse posizioni nel foglio "Nome Foglio":

    Descrizione campione:      C8

    Dato1:                              F17

    Dato2:                              F21

    Dato3:                              F25

    Dato4:                              F29

    Dato5:                              F33

    Dato6:                              I17

    Dato7:                              I21

    Dato8:                              I25

    Dato9:                              I29

    Dato10:                            I33

    Ho bisogno di riassumere queste informazioni in un nuovo file Excel (ad es. "Riepilogo.xls"), inserendo i dati di ciascun prodotto in una riga diversa che includa anche

    "Codice_prodotto" (sottocartella in cui è il file originale) e

    "Nome_campione" (il nome del file xls originale)   

    Si può fare?

    P.S. che si a digiuno di VB non vuol dire che non voglia imparare. Benvenuti i consigli su una buona guida introduttiva.

    Possiamo farlo se le sottocartelle sono contenute in una determinata cartella. Esempio:

    C:\CartellaA\CartellaB\

                                        Sottocartella1\File.xls

                                        Sottocartella2\File.xls

                                        Sottocartella3\File.xls

                                        ecc.

    La risposta è stata utile?

    0 commenti Nessun commento