2015-08-23 1 views
0

J'ai des problèmes avec mon code. Tout fonctionne très bien, jusqu'à ce que j'atteigne ma 3ième instruction foreach, alors toutes les colonnes remplacent et affichent les données de la dernière foreach. Avez-vous des sugestions? Et je voudrais demander si quelqu'un sait comment puis-je utiliser si déclaration pour voir si il y a une valeur "stop" dans la colonne (Si ws.cells (i, 1) <> "" Ensuite). Merci beaucoup. Ci-dessous mon code:Copier plusieurs colonnes d'une feuille de calcul dans une autre colonne dans une autre feuille de calcul

lastRowMaster = 1 

For Each Ws In Sheets(Array("List1", "List2", "List3")) 
     lastrow = Ws.Range("A" & Rows.Count).End(xlUp).row 
     Ws.Range("C1:C50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("D" & lastRowMaster) 
     Ws.Range("A1:A50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("A" & lastRowMaster) 
     Ws.Range("L1:L50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("B" & lastRowMaster) 
     Ws.Range("L1:L50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("C" & lastRowMaster) 
     lastRowMaster = Worksheets("MasterList").Range("A" & Rows.Count).End(xlUp).row + 1 
Next 


For Each Ws In Sheets(Array("List3")) 
     lastrow = Ws.Range("N" & Rows.Count).End(xlUp).row 
      Ws.Range("Q7:Q50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("D" & lastRowMaster) 
     Ws.Range("N7:N50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("A" & lastRowMaster) 
     Ws.Range("P7:P50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("B" & lastRowMaster) 
     Ws.Range("P7:P50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("C" & lastRowMaster) 
     lastRowMaster = Worksheets("MasterList").Range("N" & Rows.Count).End(xlUp).row + 1 

Next 


For Each Ws In Sheets(Array("List3")) 
     lastrow = Ws.Range("AA" & Rows.Count).End(xlUp).row 
      Ws.Range("AD7:AD50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("D" & lastRowMaster) 
     Ws.Range("AA7:AA50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("A" & lastRowMaster) 
     Ws.Range("AC7:AC50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("B" & lastRowMaster) 
     Ws.Range("AC7:AC50" & lastrow).Copy Destination:=Worksheets("MasterList").Range("C" & lastRowMaster) 
     lastRowMaster = Worksheets("MasterList").Range("AA" & Rows.Count).End(xlUp).row + 1 

Next 

Répondre

1

La deuxième remise à zéro pour lastRowMaster ne fait pas référence à la colonne appropriée sur les feuilles de travail (« MasterList ») pour obtenir la dernière ligne.

Dim lr As Long, lrm As Long 

lrm = 1 
With Worksheets("MasterList") 
    For Each Ws In Sheets(Array("List1", "List2", "List3")) 
     lr = Ws.Range("A" & Rows.Count).End(xlUp).Row 
     Ws.Range("C1:C" & lr).Copy Destination:=.Range("D" & lrm) 
     Ws.Range("A1:A" & lr).Copy Destination:=.Range("A" & lrm) 
     Ws.Range("L1:L" & lr).Copy Destination:=.Range("B" & lrm) 
     Ws.Range("L1:L" & lr).Copy Destination:=.Range("C" & lrm) 
     'lrm = .Range("A" & Rows.Count).End(xlUp).Row + 1 '<~~original method; not so good 
     lrm = lrm + Range("C1:C" & lr).Rows.Count `<~~doesn't matter which worksheet. the number of rows remains the same 
    Next 

    For Each Ws In Sheets(Array("List3")) 
     lr = Ws.Range("N" & Rows.Count).End(xlUp).Row 
     Ws.Range("Q7:Q" & lr).Copy Destination:=.Range("D" & lrm) 
     Ws.Range("N7:N" & lr).Copy Destination:=.Range("A" & lrm) 
     Ws.Range("P7:P" & lr).Copy Destination:=.Range("B" & lrm) 
     Ws.Range("P7:P" & lr).Copy Destination:=.Range("C" & lrm) 
     'lrm = .Range("A" & Rows.Count).End(xlUp).Row + 1 '<~~this was set to column N. Nothing goes into column N. Probably should be column A from MasterList, not N from ws 
     lrm = lrm + Range("Q7:Q" & lr).Rows.Count `<~~doesn't matter which worksheet. the number of rows remains the same 
    Next 

    For Each Ws In Sheets(Array("List3")) 
     lr = Ws.Range("AA" & Rows.Count).End(xlUp).Row 
     Ws.Range("AD7:AD" & lr).Copy Destination:=.Range("D" & lrm) 
     Ws.Range("AA7:AA" & lr).Copy Destination:=.Range("A" & lrm) 
     Ws.Range("AC7:AC" & lr).Copy Destination:=.Range("B" & lrm) 
     Ws.Range("AC7:AC" & lr).Copy Destination:=.Range("C" & lrm) 
     'lrm = .Range("AA" & Rows.Count).End(xlUp).Row + 1 '<~~Don't know why this is column AA either. Probably should be column A from MasterList, not AA from ws 
     lrm = lrm + Range("AD7:AD" & lr).Rows.Count `<~~doesn't matter which worksheet. the number of rows remains the same 
    Next 
End With 

incrémenter lastRowMaster serait peut-être mieux que,

lrm = lrm + Range("AD7:AD" & lr).Rows.Count 

Je doute tout le code comme Ws.Range("C1:C50" & lr). Si lr était égal à 99, alors cela revient à Ws.Range("C1:C5099"). Peut-être que cela devrait être Ws.Range("C1:C" & lr). J'ai ajusté mon interprétation de votre code en fonction de mes soupçons.