You are here:--[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

  • Autore
    Articoli
  • Avatarpaolots
    Partecipante
      Post totali: 7

      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 argomento è stato modificato 3 mesi, 2 settimane fa da BySalv BySalv.
    • BySalvBySalv
      Amministratore del forum
        Post totali: 480

        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

      • Avatarpaolots
        Partecipante
          Post totali: 7

          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 3 mesi, 2 settimane fa da BySalv BySalv.
        • BySalvBySalv
          Amministratore del forum
            Post totali: 480

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

            Ciao By Sal (8-D

          Devi essere loggato per rispondere a questa discussione.

          Utilizzando il sito, accetti l'utilizzo dei cookie da parte nostra. maggiori informazioni

          Questo sito utilizza i cookie per fornire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o cliccando su "Accetta" permetti il loro utilizzo.

          Chiudi