MACRO EXCEL per copiare dati da una colonna di foglio ad una colonna di un altro foglio

Anonimo
2018-09-12T13:47:26+00:00

Buongiorno a tutti.

Avrei bisogno di creare una macro Excel per copiare le colonne di un file excel in colonne di un altro file excel.

Ho due file excel : il file X il file Y entrambi hanno la prima riga di intestazione, diverse per i due file

devo copiare:

la  colonna A del file X nella colonna C del file Y

la  colonna D del file X nella colonna D del file Y

la  colonna M del file X nella colonna E del file Y

la  colonna N del file X nella colonna H del file Y

la  colonna L del file X nella colonna J del file Y

la  colonna H del file X nella colonna K del file Y

la  colonna J  del file X nella colonna N del file Y

Qualcuno puo aiutarmi ?

Grazie

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
2018-09-13T19:25:49+00:00

Ciao Paolo,

grazie Norman

lo script funziona perfettamente

Mi fa piacere,

è possibile non cipiare da foglio x la riga1 di intestazione nel foglio Y ma solo dalla riga 2 delle colonne indicate

Prova il seguente adattamento del codice:

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

Option Explicit

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

Public Sub Tester()

    Dim srcWB As Workbook, destWB As Workbook

    Dim srcSH As Worksheet, destSH As Worksheet

    Dim srcRng As Range

    Dim arrSorgente As Variant, arrDestinazione As Variant

    Dim i As Long

    Dim LRow As Long

    Dim CalcMode As Long

    Const sFile_Sorgente As String = "x.xlsx"                       '<<=== Modifica

    Const sFile_Destinazione As String = "y _prima.xlsx"     '<<=== Modifica

    Const sFoglio_Sorgente As String = "X"                           '<<=== Modifica

    Const sFoglio_Destinazione As String = "WELFARE"      '<<=== Modifica

    Const sColonne_Sorgente As String = _

                                                    "A,D,M,N,L,H,J"                '<<=== Modifica

    Const sColonne_Destinazione As String = _

                                                     "C,D,E,H,J,K,N"               '<<=== Modifica

    Set destWB = Workbooks(sFile_Destinazione)

    Set srcWB = Workbooks(sFile_Sorgente)

    Set srcSH = srcWB.Sheets(sFoglio_Sorgente)

    Set destSH = destWB.Sheets(sFoglio_Destinazione)

    arrSorgente = Split(sColonne_Sorgente, ",")

    arrDestinazione = Split(sColonne_Destinazione, ",")

    With Application

        CalcMode = .Calculation

        .Calculation = xlCalculationManual

        .ScreenUpdating = False

    End With

    LRow = srcSH.UsedRange.Rows.Count

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

        Set srcRng = srcSH.Columns(arrSorgente(i)).Resize(LRow - 1).Offset(1)

        srcRng.Copy Destination:= _

                    destSH.Columns(arrDestinazione(i)).Cells(2)

    Next i

    Call MsgBox( _

         Prompt:="Finito", _

         Buttons:=vbInformation, _

         Title:="REPORT")

XIT:

    With Application

        .Calculation = CalcMode

        .ScreenUpdating = True

    End With

End Sub

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

===

Regards,

Norman

La risposta è stata utile?

2 persone hanno trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2018-09-12T16:11:55+00:00

Ciao Paolo,

al link seguente allego esempi file X e Y prima e dopo

https://1drv.ms/f/s!AuF-sFCDh6qtcytpeBs3Fk\_EM6M

Prova qualcosa del genere:

  • Apri un nuovo workbook
  • Alt+F11 per aprire l'editor di VBA
  • Alt+IMper inserire un nuovo modulo di codice
  • Nel nuovo modulo vuoto, incolla il seguente codice:

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

Option Explicit

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

Public Sub Tester()

    Dim srcWB As Workbook, destWB As Workbook

    Dim srcSH As Worksheet, destSH As Worksheet

    Dim srcRng As Range, destRng As Range

    Dim arrSorgente As Variant, arrDestinazione As Variant

    Dim i As Long

    Dim LRow As Long

    Dim CalcMode As Long

    Const sFile_Sorgente As String = "x.xlsx"                        '<<=== Modifica

    Const sFile_Destinazione As String = "y _prima.xlsx"     '<<=== Modifica

    Const sFoglio_Sorgente As String = "X"          '<<=== Modifica

    Const sFoglio_Destinazione As String = "WELFARE"      '<<=== Modifica

    Const sColonne_Sorgente As String = _

                                                      "A,D,M,N,L,H,J"                '<<=== Modifica

    Const sColonne_Destinazione As String = _

                                                      "C,D,E,H,J,K,N"               '<<=== Modifica

    Set srcWB = Workbooks(sFile_Sorgente)

    Set destWB = Workbooks(sFile_Destinazione)

    Set srcSH = srcWB.Sheets(sFoglio_Sorgente)

    Set destSH = destWB.Sheets(sFoglio_Destinazione)

    arrSorgente = Split(sColonne_Sorgente, ",")

    arrDestinazione = Split(sColonne_Destinazione, ",")

    With Application

        CalcMode = .Calculation

        .Calculation = xlCalculationManual

        .ScreenUpdating = False

    End With

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

        srcSH.Columns(arrSorgente(i)).Copy _

                Destination:=destSH.Columns(arrDestinazione(i))

    Next i

    Call MsgBox( _

         Prompt:="Finito", _

         Buttons:=vbInformation, _

         Title:="REPORT")

XIT:

    With Application

        .Calculation = CalcMode

        .ScreenUpdating = True

    End With

End Sub

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

  • Alt+Q per chiudere l'editor di VBA e tornare a Excel
  • Salva il file con l’estensione xlsm
  • Alt+F8 per aprire  la finestra di gestione delle macro
  • Seleziona Tester
  • Esegui

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2018-09-13T14:22:40+00:00

    grazie Norman

    lo script funziona perfettamente

    è possibile non cipiare da foglio x la riga1 di intestazione nel foglio Y ma solo dalla riga 2 delle colonne indicate

    Grazie

    Paolo

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2018-09-12T14:33:32+00:00

    Prova  a caricare  un esempio, comprendente le intestazioni e due righe di dati,  per dimostare il file X  il file Y, sia prima che dopo la copia dei dat.i 

    ===

    Regards,

    Norman

    grazie della risposta ,

    al link seguente allego esempi file X e Y prima e dopo

    https://1drv.ms/f/s!AuF-sFCDh6qtcytpeBs3Fk\_EM6M

    Garzie

    Paolo

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2018-09-12T14:08:56+00:00

    Ciao Paolo,

    Avrei bisogno di creare una macro Excel per copiare le colonne di un file excel in colonne di un altro file excel.

    Ho due file excel : il file X il file Y entrambi hanno la prima riga di intestazione, diverse per i due file

    devo copiare:

    la  colonna A del file X nella colonna C del file Y

    la  colonna D del file X nella colonna D del file Y

    la  colonna M del file X nella colonna E del file Y

    la  colonna N del file X nella colonna H del file Y

    la  colonna L del file X nella colonna J del file Y

    la  colonna H del file X nella colonna K del file Y

    la  colonna J  del file X nella colonna N del file Y

    Qualcuno puo aiutarmi ?

    Prova  a caricare  un esempio, comprendente le intestazioni e due righe di dati,  per dimostare il file X  il file Y, sia prima che dopo la copia dei dat.i 

    Per caricare il file su Microsoft OneDrive, vedi:

    Condividere file e cartelle di OneDrive

    Nel caso di DropBox, vedi:

    Come faccio a condividere file e cartelle in Dropbox?

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento