Condividi:        

Usare un codice For Each in più range

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

Usare un codice For Each in più range

Postdi blunotte13 » 01/04/11 16:23

Ciao a tutti, con questo codice
Codice: Seleziona tutto
Dim zona As Range
    Sheets("foglio1").Select
    Set zona = Range("b10:b37")
    For Each cl In zona
    If cl <> "" Then
    Sheets("foglio1").Select
    Range(cl, cl.Offset(0, 1)).Select
    Selection.Copy
    Sheets("foglio2").Select
    Range("AR1").Select
    ActiveSheet.Paste
    Calculate
    Range("AT1").Copy
    Sheets("foglio1").Select
    Columns("D").Select
    Colonna = ActiveCell.Column
    Cells(65535, Colonna).End(xlUp).Offset(1, 0).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
End If
Next

che uso tantissimo per la sua comodità, quando i valori contenuti nel range "b10:b37" sono finiti termina il suo compito. Come faccio a dire a dire alla macro che: dopo aver usato il range "b10:b37" passi al range "S1:S37" e poi al range "AB1:AB37" senza scrivere tante macro quante le colonne ( una cinquantina) del mio file nelle quali devo le operazioni?
Grazie in anticipo.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 138
Iscritto il: 13/01/10 19:35

Sponsor
 

Re: Usare un codice For Each in più range

Postdi Anthony47 » 01/04/11 22:27

Da quanto hai scritto faccio fatica a immaginare una "regola" per passare da "B10:B37" a " S1:S37" e successivi. Quindi il suggerimento e' di usare una variabile per elencare le coppie di range su cui lavorare (il range da copiare, il range su cui incollare) e poi usare il contenuto di questa variabile per organizzare un loop, come descritto qui: viewtopic.php?f=26&t=91039&p=519621#p519146

Se non riesci posta ancora, magari descrivendo che cosa vorresti fare e che ora fai con la macro che hai postato.

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

Re: Usare un codice For Each in più range

Postdi blunotte13 » 01/04/11 23:18

Ok grazie del suggerimento, nel fine settimana proverò ad adattarlo al mio file, poi farò sapere.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 138
Iscritto il: 13/01/10 19:35

Re: Usare un codice For Each in più range

Postdi Flash30005 » 02/04/11 00:16

Secondo me c'è qualcosa che non quadra nella macro di Blunotte13
La macro non fa altro che copiare il valore (l'ultimo) nella cella AR1 del foglio2 quindi il valore che si trova nella cella B37 del foglio1
Inoltre l'ultima parte riguardante la colonna D non fa assolutamente nulla

E' inutile, a questo punto, pensare di far fare un ciclo riferendosi ad altre colonne

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Usare un codice For Each in più range

Postdi blunotte13 » 02/04/11 00:30

Veramente a me funziona.... copia ogni valore che si trova nela range "b10:b37", con questo codice
Range(cl, cl.Offset(0, 1)).Selectcopio anche il valore che c'è in colonna C ("B10:C10, B11:C11" ecc ecc,...), incollo le due celle nel foglio2 range ("AR1"), con Calculate aggiorno dei calcoli e poi copio il risultato che mi interessa ("AT1") nella prima cella libera di foglio1 colonna D a fianco del relativo dato fine a fine elenco ("B37").

Ho ancora controllato prima di rispondere...funziona.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 138
Iscritto il: 13/01/10 19:35

Re: Usare un codice For Each in più range

Postdi Flash30005 » 02/04/11 12:22

A questo punto penso che dobbiamo scambiarci i file

io ti invio questo
Non so se mancano dati ma non vedo altri risultati rispetto a quanto elencato nel post precedente

Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Usare un codice For Each in più range

Postdi blunotte13 » 02/04/11 13:17

Grazie domenica sera tornando a casa la proverò e ti farò sapere, buon fine settimana.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 138
Iscritto il: 13/01/10 19:35

Re: Usare un codice For Each in più range

Postdi blunotte13 » 04/04/11 00:22

Ciao a tutti, ho letto la discussione che mi ha indicato Anthony47 ma non sono stato capace ad adattare il tutto al mio file,
ho scaricato il file fi Flash30005 ed ho visto che c'è la macro che ho indicato al primo post, ho modificato il file con quello che mi servirebbe cioè dire alla macro che : copia valori in "b10:b37", incolla i risultati di foglio2 nella prima cella libera di colonna "D", poi passa a "H10:H37" copia i valori, incolla i risultati nella prima cella libera di colonna "J" ecc ecc... il tutto per una cinquantina di volte sempre con lo stesso metodo.

http://rapidshare.com/files/455772578/MacroBlunotte.xls
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 138
Iscritto il: 13/01/10 19:35

Re: Usare un codice For Each in più range

Postdi ricky53 » 04/04/11 12:38

Ciao,
ho visto quanto hai scritto e ti propongo questa macro (qualche cosa si può ancora ottimizzare: per esempio i passaggi intermedi sul "foglio2" si possono calcolare mentre si sta eseguendo la macro ma ... vedi tu)

Codice: Seleziona tutto
Sub Copia_Tutti_Intervalli()
    Dim Zona As Range
    Application.ScreenUpdating = False
    Sheets("foglio1").Select
    Num_Gruppi = 2 ' <<-------- QUI metti il numero dei gruppi (1 gruppo = due azzurre + tre gialle) di celle successivi al primo
    Riga_In = 10
    Riga_Fine = 37
    For I = 2 To (Num_Gruppi * 6 + 2) Step 6
        Set Zona = Range(Cells(Riga_In, I), Cells(Riga_Fine, I))
        Colonna = I + 2
        For Each CL In Zona
            If CL <> "" Then
                Sheets("foglio1").Range(CL, CL.Offset(0, 1)).Copy
                Sheets("foglio2").Range("AR1").PasteSpecial Paste:=xlPasteValues
                Calculate ' <<------- Controlla: Forse non serve ! Verifica se il calcolo è impostato in "Automatico"
                Sheets("foglio2").Range("AT1:AV1").Copy
                Sheets("foglio1").Cells(65535, Colonna).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
            End If
        Next CL
    Next I
    Application.ScreenUpdating = True
End Sub
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Usare un codice For Each in più range

Postdi blunotte13 » 04/04/11 13:03

E' perfetta grazie mille !
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 138
Iscritto il: 13/01/10 19:35

Re: Usare un codice For Each in più range

Postdi ricky53 » 04/04/11 13:33

Ciao,
grazie a te per il riscontro.

Vedi se è il caso di eliminare i passaggi sulle celle del "foglio2" trasformandoli in calcoli fatti nella macro ...

Se ti occorre aiuto ... sono/siamo QUI
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Usare un codice For Each in più range

Postdi blunotte13 » 04/04/11 16:22

Riapro per chiedere ancora una cosa, ho provato ad inserire un msgbox per scegliere il numero di colonne su cui far agire la macro, ma naturalmente non funziona
Codice: Seleziona tutto
 Dim Zona As Range
 Application.ScreenUpdating = False
 Sheets("foglio1").Select
 Num_Gruppi = Application.InputBox("Quante colonne? Min.1 Max.47")
 If  Num_Gruppi = False Then
     MsgBox "Procedura interrotta"
     Exit Sub
   End If
        Riga_In = 10
        Riga_Fine = 37
        For I = 2 To (Num_Gruppi * 6 + 2) Step 6
            Set Zona = Range(Cells(Riga_In, I), Cells(Riga_Fine, I))
            Colonna = I + 2
            For Each CL In Zona
                If CL <> "" Then
                    Sheets("foglio1").Range(CL, CL.Offset(0, 1)).Copy
                    Sheets("foglio2").Range("AR1").PasteSpecial Paste:=xlPasteValues
                    Sheets("foglio2").Range("AT1:AV1").Copy
                    Sheets("foglio1").Cells(65535, Colonna).End(xlUp).Offset(1, 0).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                        :=False, Transpose:=False
                End If
            Next CL
        Next I
        Application.ScreenUpdating = True
    End Sub

qualcunque numero inserisca nel msgbox la macro va fino alla fine delle colonne, come posso modificare per fare questa modifica?
Scusate per le continue richieste, grazie in anticipo.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 138
Iscritto il: 13/01/10 19:35

Re: Usare un codice For Each in più range

Postdi Avatar3 » 04/04/11 17:40

Cambia solo questa riga
Codice: Seleziona tutto
        For I = 2 To (Num_Gruppi * 6 - 2) Step 6


In pratica devi fare -2 non +2

Il resto sembra corretto

ciao
Per il funzionamento delle macro si deve impostare la protezione a Bassa o Media.
Menu Strumenti -> Macro -> Protezione...
Avatar utente
Avatar3
Utente Senior
 
Post: 569
Iscritto il: 04/04/11 09:04

Re: Usare un codice For Each in più range

Postdi blunotte13 » 04/04/11 17:49

Ci proverò, grazie.
Alla prossima, ciao ciao !!


Excel 2007
blunotte13
Utente Senior
 
Post: 138
Iscritto il: 13/01/10 19:35


Torna a Applicazioni Office Windows


Topic correlati a "Usare un codice For Each in più range":


Chi c’è in linea

Visitano il forum: Gianca532011 e 56 ospiti