Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Excel VBA Macro] Copiare blocchi di dati

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[Excel VBA Macro] Copiare blocchi di dati

Postdi andrea.manfredi » 10/07/10 15:40

Ciao a tutti.

Credo di avere un problema piuttosto semplice per chi conosce VBA, non per me che ne sono all'oscuro.

Il mio obiettivo è il seguente:
- copiare gruppi di 100 righe alla volta presenti nel foglio [DB]
- incollarli nel foglio [DB-macro]
-> a questo punto un modello excel calcola dei risultati sulla base di questi valori ed elabora dei risultati
- copiare i 100 risultati elaborati nel foglio [sub-output]

Ho impostato una prima macro per fare questi passaggi. La macro che ho impostato ragiona una riga alla volta (copio la macro al termine del posto). Vorrei capire come evitare di fare una riga alla volta, ma fare 100 righe alla volta. Chiaramente al primo giro la macro deve prendere le prime 100 righe, al secondo giro le seconde 100 righe, al terzo giro le terze 100 righe e via così.

Nello specifico, i due problemi che non riesco a risolvere sono:
- come copiare più di una riga alla volta
- come impostare il "next r" in modo che non vada al "next r", ma al "next r + 100" (altrimenti invece che copiare 0-100, 101-200, 201-300 mi ritrovo a copiare 0-100, 1-101, 2-102, ...)

Ecco la macro che ho sviluppato:
Codice: Seleziona tutto
Sub Macro3()
'
' Macro3 Macro
'


For r = 7 To 100

    Sheets("DB").Activate
    Cells(r, 1).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
   
    Sheets("DB-macro").Activate
    Range("A7").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
   
   
    Sheets("Engine-I").Activate
    Range("A7:C7").Select
    Selection.Copy
   
    Sheets("Sub-output").Activate
    Cells(r, 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
   
       
    Sheets("Engine-I").Activate
    Range("S7:BA7").Select
    Selection.Copy
   
    Sheets("Sub-output").Activate
    Cells(r, 4).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone

Next r

End Sub


Grazie mille!!!
andrea

Per favore usare i tag Code sul listato di una macro: selezionare il testo, premere Code.
Anthony
andrea.manfredi
Newbie
 
Post: 1
Iscritto il: 10/07/10 15:29

Sponsor
 

Re: [Excel VBA Macro] Copiare blocchi di dati

Postdi Flash30005 » 10/07/10 21:44

Ciao Andrea.Manfredi e benvenuto nel Forum

Puoi usare questa macro
Codice: Seleziona tutto
Sub TestCiclo()
For Ciclo = 1 To 10
RigaInizio = (Ciclo - 1) * 100 + 1
RigaFine = Ciclo * 100
MsgBox RigaInizio & " " & RigaFine
Next Ciclo
End Sub

Non so quanti cicli dovrai fare (io ho impostato 10 e con 10 cicli arrivi a 10 blocchi da 100)
Al posto del messaggio inserisci il blocco da copiare sapendo che nel range dovrai mettere
le variabili RigaInizio e RigaFine

Ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [Excel VBA Macro] Copiare blocchi di dati

Postdi Anthony47 » 10/07/10 23:00

Ciao andrea e benvenuto nel forum anche da parte mia.
In aggiunta alle considerazioni di Flash (vedi sopra)... Se vuoi lavorare a blocchi di 100 righe alla volta (invece di 1 alla volta) allora potresti usare ".resize", ad esempio:
Codice: Seleziona tutto
Range(Selection, Selection.End(xlToRight)).Resize(100).Select

Ovviamente dovrai modificare il ciclo For /Next, ad esempio in questo modo:

Codice: Seleziona tutto
LastRow=Cells(Rows.count,1).End(xlUp).Row  ' Calcola ultima riga di col A
For r=7 to LastRow step 100
'. . .

Vedi se riesci ad adattare questi suggerimenti al tuo caso, altrimenti posta ancora.

Solo a scopo didattico, tieni presente che insieme di istruzioni quali
Codice: Seleziona tutto
Sheets("DB").Activate
Cells(r, 1).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy

Sheets("DB-macro").Activate
Range("A7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
possono essere compressi in
Codice: Seleziona tutto
Sheets("DB").Activate
Range(Cells(r,1),Cells(r,1).End(xlToRight)).Copy
Sheets("DB-macro").Range("A7").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone
(non sposta la selezione da foglio DB)
Il codice da te utilizzato ha il vantaggio che e' molto facile seguire in modalita' debug l' evoluzione e gli effetti della macro sul file in lavorazione, quindi e' piu' idoneo per utenti principianti/medio.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13894
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[Excel VBA Macro] Copiare blocchi di dati":


Chi c’è in linea

Visitano il forum: Nessuno e 17 ospiti