Condividi:        

copia range 1000 righe per volta

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

copia range 1000 righe per volta

Postdi mirmidone21 » 21/04/18 11:19

buongiorno a tutti,
ho un foglio con circa 15.000 righe ed avrei bisogno di una macro che mi copi 1000 righe per volta e le incolli su un nuovo foglio nominandolo con Step1; Step2 e cosi' via......
grazie a tutti
Windows 7 sp1 -- Office 2013
Intel i5 4430 -- 3.00 ghz ---- 4gb RAM
mirmidone21
Utente Senior
 
Post: 149
Iscritto il: 26/10/15 16:48

Sponsor
 

Re: copia range 1000 righe per volta

Postdi mirmidone21 » 21/04/18 12:14

inserisco anche la macro che ho registrato, ma vorrei che la macro facesse lei il conto delle righe presenti nel foglio1, le divida per 1000 e le copi a blocchi di 1000 fino a che non trova una riga vuota, e le incolli in un altro foglio rinominandolo con Step_01 .......
e poi ripeta la routine.

grazie


Codice: Seleziona tutto
Sub Macro1()
'
' Macro1 Macro
'

'
    Rows("2:1001").Select
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
    Sheets("Foglio2").Name = "Step_01"
    Sheets("Foglio1").Select
    Rows("1002:2001").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
    Sheets("Foglio3").Name = "Step_02"
End Sub
Windows 7 sp1 -- Office 2013
Intel i5 4430 -- 3.00 ghz ---- 4gb RAM
mirmidone21
Utente Senior
 
Post: 149
Iscritto il: 26/10/15 16:48

Re: copia range 1000 righe per volta

Postdi FRIEDRICH » 21/04/18 15:19

Ciao mirmidone21,

prova il codice seguente:

Codice: Seleziona tutto
Sub CopiaMilleRighe()
   
    Dim MieRighe As Long, GruppiRighe As Long, UltimaRiga As Long, i As Integer, NomeFoglio As String
   
    MieRighe = 1000
   
    Application.ScreenUpdating = False
   
    With ActiveSheet
        UltimaRiga = .Range("A" & .Rows.Count).End(xlUp).Row
       
        For GruppiRighe = 2 To UltimaRiga Step MieRighe
            Sheets.Add after:=ActiveSheet
           
            .Range("A" & GruppiRighe).Resize(MieRighe).EntireRow.Copy Range("A1")
           
            Columns.AutoFit
            Next GruppiRighe
           
            For i = 2 To Application.Sheets.Count
                NomeFoglio = "Step "
                Application.Sheets(i).Name = NomeFoglio & i - 1
               
            Next
            .Activate
        End With
       
        Application.ScreenUpdating = True
       
    End Sub
Avatar utente
FRIEDRICH
Utente Junior
 
Post: 36
Iscritto il: 09/07/17 17:14

Re: copia range 1000 righe per volta

Postdi mirmidone21 » 21/04/18 17:18

semplicemente perfetto !!!
funziona tutto proprio come mi serviva.
grazie infinite
Windows 7 sp1 -- Office 2013
Intel i5 4430 -- 3.00 ghz ---- 4gb RAM
mirmidone21
Utente Senior
 
Post: 149
Iscritto il: 26/10/15 16:48

Re: copia range 1000 righe per volta

Postdi Anthony47 » 21/04/18 22:26

Mi permetto di proporre questa piccola semplificazione alla macro gia' funzionante di FRIEDRICH:
Codice: Seleziona tutto
Sub CopiaMilleRighe()
Dim MieRighe As Long, GruppiRighe As Long, UltimaRiga As Long, i As Integer, NomeFoglio As String
'
MieRighe = 1000
'
Application.ScreenUpdating = False
With ActiveSheet
    UltimaRiga = .Range("A" & .Rows.Count).End(xlUp).Row
    For GruppiRighe = 2 To UltimaRiga Step MieRighe
        Sheets.Add after:=ActiveSheet
        .Range("A" & GruppiRighe).Resize(MieRighe).EntireRow.Copy Range("A1")
        Columns.AutoFit
        ActiveSheet.Name = "Step_" & Format(i + 1, "00")    'MMM
        i = i + 1                                           'MMM
    Next GruppiRighe
    .Activate
End With
Application.ScreenUpdating = True
End Sub

Le modifiche riguardano le righe marcate MMM, aggiunte in sostituzione del secondo loop.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copia range 1000 righe per volta

Postdi mirmidone21 » 22/04/18 11:27

grazie anche a te Anthony, se ho capito bene, le modifiche che hai apportato, rinominano i fogli di volta in volta, giusto?
perfetta anche la tua.
Windows 7 sp1 -- Office 2013
Intel i5 4430 -- 3.00 ghz ---- 4gb RAM
mirmidone21
Utente Senior
 
Post: 149
Iscritto il: 26/10/15 16:48

Re: copia range 1000 righe per volta

Postdi Anthony47 » 22/04/18 23:56

grazie anche a te Anthony, se ho capito bene, le modifiche che hai apportato, rinominano i fogli di volta in volta, giusto?
perfetta anche la tua
Hai capito bene, assegno il nome foglio direttamente mentre li genero; ma questa e' l'unica variante, il resto e' di Friedrich.

Alla prossima...
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copia range 1000 righe per volta

Postdi mirmidone21 » 23/04/18 11:11

ri buongiorno,
se volessi chiamare i fogli con la data odierna incrementata di giorno in giorno, es: 23-04-2018, 24-04-2018 e così via come dovrei aggiustare l'istruzione seguente?
Codice: Seleziona tutto
ActiveSheet.Name = "Step_" & Format(i + 1, "00")


grazie
Windows 7 sp1 -- Office 2013
Intel i5 4430 -- 3.00 ghz ---- 4gb RAM
mirmidone21
Utente Senior
 
Post: 149
Iscritto il: 26/10/15 16:48

Re: copia range 1000 righe per volta

Postdi Anthony47 » 23/04/18 15:01

"Ovviamente":
Codice: Seleziona tutto
        ActiveSheet.Name = Format(Now + i, "dd-mm-yyyy")   'MMM
        i = i +1

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copia range 1000 righe per volta

Postdi mirmidone21 » 23/04/18 15:25

grazie infinite, io ci avevo provato con Date() ma sbagliando sicuramente la sintassi mi andava in errore.

avevo inserito questo:
Codice: Seleziona tutto
ActiveSheet.Name = "Step_" & Format(date () + 1, "00")
Windows 7 sp1 -- Office 2013
Intel i5 4430 -- 3.00 ghz ---- 4gb RAM
mirmidone21
Utente Senior
 
Post: 149
Iscritto il: 26/10/15 16:48

Re: copia range 1000 righe per volta

Postdi mirmidone21 » 24/04/18 12:24

ho aggiunto un altro pezzo di codice che mi serve per filtrare i dati e copiare solo quelli che mi interessano.
volevo fare in modo che il range selezionato si fermasse all'ultima riga ed ho pensato di utilizzare la variabile "ultimariga"
ma mi da:
"errore di run-time 1004
errore definito dall'applicazione e dall'oggetto."
e si blocca sull'istruzione:
Codice: Seleziona tutto
ActiveSheet.Range("A:P" & UltimaRiga).AutoFilter Field:=9, Criteria1:="MAIL"

dove sto sbagliando?????
Codice: Seleziona tutto
Sub Copia_Mille_Righe()
Dim MieRighe As Long, GruppiRighe As Long, UltimaRiga As Long, i As Integer, NomeFoglio As String
'
MieRighe = 1000
'
' ========================== PEZZO AGGIUNTO
ActiveWindow.ScrollColumn = 2
    Selection.AutoFilter
    ActiveSheet.Range("A:P" & UltimaRiga).AutoFilter Field:=9, Criteria1:="MAIL"
    Cells.Select
    Selection.Copy
    Sheets.Add After:=ActiveSheet
    ActiveSheet.Paste
    Cells.Select
    Cells.EntireColumn.AutoFit
    Application.CutCopyMode = False
    Selection.AutoFilter
    ActiveSheet.Name = "MAIL"
'=================================
Application.ScreenUpdating = False
With ActiveSheet
    UltimaRiga = .Range("A" & .Rows.Count).End(xlUp).Row
    For GruppiRighe = 2 To UltimaRiga Step MieRighe
        Sheets.Add After:=ActiveSheet
        .Range("A" & GruppiRighe).Resize(MieRighe).EntireRow.Copy Range("A1")
        Columns.AutoFit
        'ActiveSheet.Name = "Step_" & Format(i + 1, "00")    'MMM
        ActiveSheet.Name = Format(Now + i, "dd-mm-yyyy")
        i = i + 1                                           'MMM
    Next GruppiRighe
    .Activate
End With
Application.ScreenUpdating = True
End Sub
Windows 7 sp1 -- Office 2013
Intel i5 4430 -- 3.00 ghz ---- 4gb RAM
mirmidone21
Utente Senior
 
Post: 149
Iscritto il: 26/10/15 16:48

Re: copia range 1000 righe per volta

Postdi Anthony47 » 25/04/18 19:58

La variabile "UltimaRiga" rimane vuota fintanto non la riempi. Quindi sposta il calcolo di UltimaRiga all'inizio del "pezzo aggiunto"
Inoltre non puoi usare Range("A:P" & UltimaRiga), ma Range("A1:P" & UltimaRiga)

Questo dovrebbe eliminare gli errori di esecuzione, poi non so se fara' quel che tu desideri.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: copia range 1000 righe per volta

Postdi mirmidone21 » 26/04/18 09:17

grazie dei suggerimenti, ho spostato la valorizzazione della variabile "UltimaRiga" all'inizio togliendo un . (punto) di troppo che mi mandava in errore la macro (errore di compilazione)
ho sostituito
Codice: Seleziona tutto
UltimaRiga = .Range("A" & .Rows.Count).End(xlUp).Row
con
Codice: Seleziona tutto
UltimaRiga = Range("A" & Rows.Count).End(xlUp).Row


ora funge tutto, anche se non ho capito bene la differenza fra le due istruzioni. :?: :-?
Windows 7 sp1 -- Office 2013
Intel i5 4430 -- 3.00 ghz ---- 4gb RAM
mirmidone21
Utente Senior
 
Post: 149
Iscritto il: 26/10/15 16:48

Re: copia range 1000 righe per volta

Postdi Anthony47 » 26/04/18 14:09

Se scrivi ".Range" significa che Range e' riferita a un "padre" (un worksheet) precedentemente definito tramite l'istruzione With. Nella nuova posizione la With non e' stata ancora usata, da cui l'errore; l'assenza della descrizione del "padre" provoca l'associazione al foglio attivo.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19480
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "copia range 1000 righe per volta":


Chi c’è in linea

Visitano il forum: Nessuno e 16 ospiti