Creare nuovo file excel estraendo i dati da altri file excel

Anonimo
2014-12-04T23:55:26+00:00

Ciao,

premetto che non conosco praticamente nulla di VBA.

Nel corso degli anni ho creato innumerevoli file Excel strutturati nel medesimo modo.

Ogni file è composto da diversi fogli, tutti uguali nella struttura tranne i fogli Pippo e Pluto (che sono diversi nella struttura e non ho necessità di prendere in considerazione).

Ogni foglio è strutturato in modo identico all'altro.

Il nome di questi fogli è composto da strighe che (ahimè) contengono anche punti (.) e parentesi e segni +-

Ora vorrei estrarre tutti i dati da questi fogli e riepilogarli in un unico foglio.

Esempio di un file

cartellann.xls

foglio23.5                 voglio prendere il contenuto della cella E8,E9,E10............

foglio2Ø3.5ES44      voglio prendere il contenuto della cella E8,E9,E10...........

foglio23.5+23(3)      voglio prendere il contenuto della cella E8,E9,E10............

pippo                       non voglio considerare

pluto                        non voglio considerare

vorrei creare una nuova cartella suppergiù così.

cartellann.xls             foglio23.5                contenuto cella E8                contenuto cella E9              contenuto cella E10 ................

cartellann.xls            foglio2Ø3.5ES44      contenuto cella E8                contenuto cella E9              contenuto cella E10 ................

cartellann.xls            foglio23.5+23(3)      contenuto cella E8                contenuto cella E9              contenuto cella E10 ................

cartellannnnnn.xls    così via.....

Come posso fare?

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
Anonimo
2014-12-16T11:35:30+00:00

Ciao Red Mud,

     Const sAddress = "F2,K2,C4,H4,C6,H6,E8,I7,I8,J8,L8," _

          & "E9,I9,E10,E11,E12,E13,I14,J15,E16,J17,J18," _

    & "B21,E21,H21,J21,O21,B22,E22,H22,J22,O22," _

& "B23,E23,H23,J23,O23,B24,E24,H24,J24,O24," _

& "B25,E25,H25,J25,O25,B26,E26,H26,J26,O26,B28,J28,I30," _

& "L30,L32,D36,F36,I36,D37,F37,I37,D38,F38,I38," _

& "P15,P16,P17,P18"                     '<<==== Modifica

Credo che il tuo problema sia dovuto alla lunghezza della stringa sAddress e il numero di caratteri linebreak (_).

Pertanto, prova invece:

      Const sAddress As String = "F2,K2,C4,H4,C6,H6,J8,L8,I7:I9," _

& "E8:E13,I14,J15,E16,J17:J18,B21:B26,E21:E26," _

& "H21:H26,J21:J26,O21:O26,B28,J28,I30,L30,L32," _

& "D36:D38,F36:F38,I36:I38,P15:P18"                                

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

36 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-12-05T18:05:02+00:00

    Ciao Red Mud,

    Prova qualcosa del genere:

    • Alt-F11 per aprire l'editor di VBA
    • Alt-IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

     '=========>>

    Option Explicit

    '--------->>

    Public Sub Tester()

        Dim WB As Workbook

        Dim SH As Worksheet, destSH As Worksheet

        Dim Rng As Range, rCell As Range

        Dim arrExclude As Variant, arrFolders As Variant, arrHeaders As Variant

        Dim iRow As Long

        Dim i As Long, j As Long

        Dim myFile As String

        Dim Res As Variant

        Const sAddress = "F2,K2,C4"

        Const sFolders As String = "**C:\Pippo,C:\Pluto,C:Cat,C:\Dog**"                    '<<=== Modifica

        Const sHeaders As String = "File di Origine,Foglio di Origine,Cliente,Data,Descrizione"

        Set WB = ThisWorkbook

        Set destSH = WB.Sheets(1)

        iRow = 1

        arrExclude = VBA.Array("Calcolo peso", "Forme")

        arrFolders = Split(sFolders, ",")

        arrHeaders = Split(sHeaders, ",")

        destSH.Range("A1:E1").Value = arrHeaders

        On Error GoTo XIT

        Application.ScreenUpdating = False

        For i = LBound(arrFolders) To UBound(arrFolders)

            If Right(arrFolders(i), 1) <> Application.PathSeparator Then

                arrFolders(i) = arrFolders(i) & Application.PathSeparator

            End If

            myFile = Dir(arrFolders(i))

            Do While myFile <> ""

                Set WB = Workbooks.Open(arrFolders(i) & myFile)

                With WB

                    For Each SH In WB.Worksheets

                        With SH

                            j = 1

                            Res = Application.Match(.Name, arrExclude, 0)

                            If IsError(Res) Then

                                iRow = iRow + 1

                                With destSH

                                    .Cells(iRow, "A").Value = WB.FullName

                                    .Cells(iRow, "B").Value = SH.Name

                                    Set Rng = SH.Range(sAddress)

                                    For Each rCell In Rng.Cells

                                        j = j + 1

                                        .Cells(iRow, j + 1).Value = rCell.Value

                                    Next rCell

                                End With

                            End If

                        End With

                    Next SH

                    .Close savechanges:=False

                End With

                myFile = Dir()

            Loop

        Next i

        destSH.UsedRange.EntireColumn.AutoFit

    XIT:

        Application.ScreenUpdating = True

    End Sub

    '<<=========

    • Alt-Q per chiudere l'editor di VBA e tornare a Excel.
    • Alt-F8 per aprire  la finestra di gestione delle macro
    • Seleziona Tester | Esegui

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-12-05T15:03:34+00:00

    Ciao Norman,

    grazie per il tuo interessamento.

    1° Il nuovo file deve avere uno solo foglio. Dovrò poi esportare la tabella in Access utilizzare i dati in un   database che dovrò creare.

    2° I file da cui prelevare i dati si trovano in diverse directory.

        Ogni directory ha il nome del cliente......in ogni directory sono contenuti i file (articoli specifici di quel cliente) da cui prelevare i dati. Per cui....più clienti...più directory....in ogni directory più file contenenti i dati.

    3° SI. In ogni directory del cliente ci sono solo i files relativi agli articoli.

    4° I fogli che non sono di interesse si chiamano sempre in modo univoco: "Calcolo peso" e "Forme"

    5° Nel nuovo foglio che creeremo vorrei che compaia una riga con il nome del file origine.

    6° Si. Gradirei avere una cella indicante nome file sorgente e nome foglio origine.

    Non sono pratico del forum...potrei caricare il file di origine così risulterebbe tutto più chiaro.

    Grazie.

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-12-05T14:12:11+00:00

    Ciao Norman,

    grazie per il tuo interessamento.

    1° Il nuovo file deve avere uno solo foglio. Dovrò poi esportare la tabella in Access utilizzare i dati in un   database che dovrò creare.

    2° I file da cui prelevare i dati si trovano in diverse directory.

        Ogni directory ha il nome del cliente......in ogni directory sono contenuti i file (articoli specifici di quel cliente) da cui prelevare i dati. Per cui....più clienti...più directory....in ogni directory più file contenenti i dati.

    3° SI. In ogni directory del cliente ci sono solo i files relativi agli articoli.

    4° I fogli che non sono di interesse si chiamano sempre in modo univoco: "Calcolo peso" e "Forme"

    5° Nel nuovo foglio che creeremo vorrei che compaia una riga con il nome del file origine.

    6° Si. Gradirei avere una cella indicante nome file sorgente e nome foglio origine.

    Non sono pratico del forum...potrei caricare il file di origine così risulterebbe tutto più chiaro.

    Grazie.

    Ciao

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-12-05T09:44:36+00:00

    Ciao Red mud,

    Almeno per me la spiegazione delle tue esigenze non è sufficiente.

    • Non mi è chiaro se il nuovo file deve avere un foglio, tre fogli o 3x fogli, dove x è il numero di file di interesse?
    • Sono tutti i file d'interesse in una singola directory?
    • Questa directory contiene solo i file di interesse?
    • Come possiamo individuare i due fogli che non sono di interesse, ovvero i fogli Pippo e Pluto?
    • Si deve mantenere i nomi originali per i nuovi fogli?
    • È necessario indicare il nome del file sorgente e fogli di origine?

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento