You are here:Home-Domande su Excel VBA e MACRO-[RISOLTO] Fusione tre archivi in uno con scambio colonne
[RISOLTO] Fusione tre archivi in uno con scambio colonne2019-05-09T15:25:50+02:00

Home Forum Domande su Excel VBA e MACRO [RISOLTO] Fusione tre archivi in uno con scambio colonne

Visualizzazione 3 filoni di risposte
  • Autore
    Post
    • Avatarpaolots
      Partecipante
        Post totali: 15

        Buongiorno a tutti.
        Dovendo trattare file di grosse dimensioni (circa 2000 rcd per file), con le mie capacità non mi restava altro che di esercitarmi in una serie di copia incolla. Se qualcuno mi darà un aiuto mi risparmierò il rischio di fare confusione.
        Grazie in anticipo.
        Quello che vi propongo è:
        -vi sono in input tre file F1,F2,F3.
        – è previsto di produrre in output un file “OUTPUT” contenente in sequenza i dati contenuti in F1 poi F2 e F3.
        Entrambi i file di input contengono nella riga 1 le suguenti intestazioni: UN DU TR QU CI e a1 a2 a3.
        Le intestazioni UN DU TR QU CI non rispettano, in nessuno dei file di input, la sequenza colonna A,B,C,D,E, mentre le intestazioni a1,a2,a3 sono presenti sempre nelle colonne F,G,H. Ad esempio: I dati presenti nel file F1 nella colonna con intestazione “UN” si trovano nella colonna “D”, mentre nel file F2 si trovano nella colonna “K”, e nel file F3 si trovano nella colonna “W”.
        Come sequenza di elaborazione, prendendo ad esempio i file allegati:
        -a) leggo in sequenza i record del file F1;
        -ricerco la colonna con l’intestazione “UN” e scrivo il dato presente nella colonna “A”, del file di OUTPUT, e di seguito ricerco la colonna con intestazione “DU” e scrivo il contenuto nella colonna “B” del file OUTPUT, e così di seguito fino alla colonna con intestazione “CI” i cui dati verranno scritti nella colonna E del file OUTPUT. I dati presenti in input nelle colonne F G H vanno trasferiti nelle stesse colonne del file OUTPUT.
        -b) stesso criterio per i file F2 ed F3.
        Alla fine si otterrà un file come descritto nell’allegato file “OUTPUT”.
        Ancora grazie per la Vs. preziosa collaborazione.
        Paolots

        http://www.filedropper.com/f1_1

        http://www.filedropper.com/f2

        http://www.filedropper.com/f3

        http://www.filedropper.com/output

         

        • Questo topic è stato modificato 1 anno, 2 mesi fa da BySalvBySalv.
      • BySalvBySalv
        Amministratore del forum
          Post totali: 759

          Ciao Paolots, ecco la macro che fa il lavoro

          Sub Trasferisci()
          Dim r, c, k, x, y, z, d, HH, rng, Risp, ind, ind2, wk, sh, Wk0 As Workbook, Sh0 As Worksheet
          
          Set Wk0 = ActiveWorkbook
          Set Sh0 = Worksheets("Foglio1")
          ind = ActiveWorkbook.Path
          Sh0.Activate
          Application.ScreenUpdating = False
          r = Sh0.Cells(Rows.Count, 1).End(xlUp).Row
          Risp = MsgBox("Attenzione! elimino la ricerca precedente, altrimenti verranno accodati", vbInformation + vbYesNo, "Gestione dati")
          If Risp = 6 Then Sh0.Range("A2:H" & r).ClearContents: k = 2 Else k = Sh0.Cells(Rows.Count, 1).End(xlUp).Row + 1
          r = Sh0.Cells(Rows.Count, 27).End(xlUp).Row
          HH = Sh0.Range("AA2:AB" & r)
          Application.DisplayAlerts = False
          For x = 1 To UBound(HH)
              wk = HH(x, 1)
              sh = HH(x, 2)
              ind2 = ind & "\" & wk
              Workbooks.Open Filename:=ind2
              Sheets(sh).Select
              r = Cells(Rows.Count, 1).End(xlUp).Row
              rng = Range("A1:H" & r)
              Workbooks(wk).Close
              For y = 2 To UBound(rng)
                  For z = 1 To UBound(rng, 2)
                      d = rng(1, z)
                      Select Case d
                          Case "un": c = 1
                          Case "du": c = 2
                          Case "tr": c = 3
                          Case "qu": c = 4
                          Case "ci": c = 5
                          Case "a1": c = 6
                          Case "a2": c = 7
                          Case "a3": c = 8
                      End Select
                      Sh0.Cells(k, c) = rng(y, z)
                  Next z
                  k = k + 1
              Next y
          Next x
          Sh0.Activate
          Application.ScreenUpdating = True
          Cells(1, 1).Select
          End Sub

          Ricorda che i file devono stare tutti nella stessa cartella, altrimenti non riesce a trovarli.
          i nomi dei file da aprire si trovano alla colonna “AA” del foglio1 del file “Output”, ho messo il nome del file con l’estensione ed anche il nome del foglio dove sono i dati da riportare, se devi cambiarli devi cambiarli nelle colonne “AA-AB”, i file possono essere anche più di 3 basta aggiungerli.
          un ultima cosa le intestazioni mi raccomando che siano uguali, perche nei file che hai inserito nel file “F1” la sigla “du” era senza Spazi negli altri 2 file la sigla era “du ” con lo spazio dopo, quindi non riusciva a riportare i dati perche sono diverse.

          ti allego anche il file con la macro.
          http://www.filedropper.com/output_1

          Ciao By Sal (8-D

          Ciao By Sal (8-)
          se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

        • Avatarpaolots
          Partecipante
            Post totali: 15

            By Sal, ti ringrazio per la risposta.

            Tutto va benissimo e corrisponde perfettamente a quanto desiderato.

            Infine, anche a costo di fare la figura dell'”asino” devo confessare che ancora, e non è la prima volta, non riesco a inserire il RISOLTO. Faccio, o almeno credo di fare correttamente, ” andare nella discussione iniziale e premere modifica nell’intestazione del post…….”, però non c’è verso di trovare il tasto “modifica”, e così prova e riprova devo arrendermi.

            Mi rendo conto di proporre una banalità, ma….per migliorare servirebbe fare bene anche questo.

            Ti rinnovo i complimenti per la grande professionalità, e questo post mi servirà per migliorare.

            Ancora grazie e un saluto.

            Paolots

            • Questa risposta è stata modificata 1 anno, 2 mesi fa da BySalvBySalv.
          • BySalvBySalv
            Amministratore del forum
              Post totali: 759

              Ciao Paolots, non preoccuparti lo inserisco io, fai copia incolla di qualcosa che inserisce un testo html.

              Ciao By Sal (8-D

              Ciao By Sal (8-)
              se ti piace la soluzione aiuta a sostenere il Forum con una DONAZIONE a piacere, Grazie

          Visualizzazione 3 filoni di risposte
          • Devi essere connesso per rispondere a questo topic.