Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Excel - Ripetere macro per celle successive

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 - Ripetere macro per celle successive

Postdi xcel2005it » 23/06/10 14:34

ciao a tutti,
il mio problema è che dovrei ripetere la macro per tutta una serie di valori in una tabella.
d55 e d107 devono rimanere fissi, invece i116 e j116 devono diventare in sequenza: i117 e j117, i118 e j118...ecc.... fino ad arrivare ad i136 e j136. Come posso fare?

La macro è la seguente:

Sub TIR()
'
' TIR Macro
'
' Scelta rapida da tastiera: CTRL+q
'
Range("I116").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=-66
Range("D55").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=51
Range("D107").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.SmallScroll Down:=9
Range("J116").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
xcel2005it
Newbie
 
Post: 4
Iscritto il: 23/06/10 14:30

Sponsor
 

Re: Excel - Ripetere macro per celle successive

Postdi Anthony47 » 23/06/10 23:35

Ciao xcel2005it e benvenuto nel forum
Insomma vuoi che D55 assuma in sequenza il valore di I116, I117, I118, etc e che in parallelo D107 venga invece copiato in J116, J117, J118 etc? Immagino che le variazioni di indirizzo le voglia fare ogni volta che esegui la macro, vero?

Ciao, ti aspettiamo
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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Ripetere macro per celle successive

Postdi xcel2005it » 24/06/10 11:32

Anthony47 ha scritto:Ciao xcel2005it e benvenuto nel forum
Insomma vuoi che D55 assuma in sequenza il valore di I116, I117, I118, etc e che in parallelo D107 venga invece copiato in J116, J117, J118 etc? Immagino che le variazioni di indirizzo le voglia fare ogni volta che esegui la macro, vero?

Ciao, ti aspettiamo


Grazie del benvenuto,
si esattamente, ho provato a copiare e reincollare sotto in sequenza da:

Range("I116").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=-66
Range("D55").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=51
Range("D107").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.SmallScroll Down:=9
Range("J116").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("I117").Select
Selection.Copy
ActiveWindow.SmallScroll Down:=-66
Range("D55").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=51
Range("D107").Select
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.SmallScroll Down:=9
Range("J117").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
...........................

sostituendo a mano i valori i116 con i117 ed j116 con j117 ecc..... dopo un lungo lavoro è uscita fuori una macro lunghissima, che funziona, ma ci è voluto un lavoro immenso. Non si può semplificare in qualche modo?

P.S. (se questo ps confonde le idee non tenetene conto)
Questa macro a me serviva per compilare in automatico la colonna di una tabella..........sarebbe utile perchè io ho 6 colonne di 6 differenti tabelle da compilare ed in ogni tabbella dovrà sempre essere usata la stessa macro, ma cambiando $d$55 per la prima tab., $d$32 per la seconda tab, $d$34 ed altri 3 differenti celle per le altre 3 tabelle. Ovviamente come ho impostato io la macro ogni circa 12 righe dovrei andare a mettere a mano d32 per la seconda tab, d34 per la terza tab......e poi fare lo stesso per le altre 3 macro
xcel2005it
Newbie
 
Post: 4
Iscritto il: 23/06/10 14:30

Re: Excel - Ripetere macro per celle successive

Postdi Flash30005 » 24/06/10 12:29

Ciao Xcel2005it e benvenuto nel Forum

Alcuni codici registrati non occorrono, altri possono essere sostituiti
in pratica puoi utilizzare questa macro
Codice: Seleziona tutto
Sub CopiaV()
Range("I116").Copy Destination:=Range("D55")
Range("D107").Copy Destination:=Range("J116")
Range("I117").Copy Destination:=Range("D55")
Range("D107").Copy Destination:=Range("J117")
End Sub

Ora se mi spieghi meglio il quesito di variare le celle da D55 a D32 e D34 etc. perché non ho ben capito se le altre celle rimangono invariate (D107 e J116, D107 e J117) oppure cambiano anche queste?
Perché potresti usare un vettore
es
Dim vr(6) = integer
vr(1) = 55
vr(2) = 32
vr(3) = 34
vr(4) = 'altra riga
vr(5) = 'altra riga
vr(6) = 'altra riga

Poi metti un for.. next
es.
Codice: Seleziona tutto
Sub CopiaV()
For riga = 1 to 6
Range("I116").Copy Destination:=Range("D" & vr(Riga))
Range("D107").Copy Destination:=Range("J116")
Range("I117").Copy Destination:=Range("D" & vr(Riga))
Range("D107").Copy Destination:=Range("J117")
next riga
End Sub


ma così sinceramente non vedo un utilizzo concreto :roll:

Fai sapere
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 - Ripetere macro per celle successive

Postdi xcel2005it » 24/06/10 13:04

Flash30005 ha scritto:Ciao Xcel2005it e benvenuto nel Forum

Ora se mi spieghi meglio il quesito di variare le celle da D55 a D32 e D34 etc. perché non ho ben capito se le altre celle rimangono invariate (D107 e J116, D107 e J117) oppure cambiano anche queste?
Perché potresti usare un vettore

Ciao


grazie anche te per il benvenuto ed a tutti per l'aiuto

1° macro:
celle $d$55 e $d$107, mentre le altre variano insieme i116 e j116, i117 e j117 ecc..fino a i136 a j136
2° macro:
celle $d$32 e $d$107, mentre le altre variano insieme i116 e j116, i117 e j117 ecc..fino a i136 a j136
3° macro:
celle $d$34 e $d$107, mentre le altre variano insieme i116 e j116, i117 e j117 ecc..fino a i136 a j136
..........


per quanto riguarda:

Sub CopiaV()
Range("I116").Copy Destination:=Range("D55")
Range("D107").Copy Destination:=Range("J116")
Range("I117").Copy Destination:=Range("D55")
Range("D107").Copy Destination:=Range("J117")
End Sub

a me serve copiare solo il valore e non la formula quindi dovrei usare questa parte?

Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
xcel2005it
Newbie
 
Post: 4
Iscritto il: 23/06/10 14:30

Re: Excel - Ripetere macro per celle successive

Postdi Flash30005 » 24/06/10 13:30

Ok però non capisco
la tua routine
inizialmente copia I116 e incolla il valore in D55
poi
copi a D107 e incolla in J116
poi copia I117 e lo incolla in D55 (quindi il valore di D55 è stato sovrascritto, a cosa serve la prima copia?)
e infine
copia D107 e incolla in J117 (quindi poteva essere copiato anche qui nel passaggio precedente o no?)
Comunque se vuoi copiare i valori con la macro da me inviata puoi usare questo codice
Codice: Seleziona tutto
Sub CopiaV()
Dim vr(6) As Integer
vr(1) = 55 ' inserire qui il numero riga di D tab 1
vr(2) = 32 ' inserire qui il numero riga di D tab 2
vr(3) = 34 ' inserire qui il numero riga di D tab 3
vr(4) = 38 ' inserire qui il numero riga di D tab 4
vr(5) = 50 ' inserire qui il numero riga di D tab 5
vr(6) = 52 ' inserire qui il numero riga di D tab 6

For riga = 1 To 6
    For RV = 116 To 136
        Range("D" & vr(riga)).Value = Range("I" & RV).Value
        Range("J" & RV).Value = Range("D107").Value
    Next RV
Next riga
End Sub


Prova questo codice
e fai sapere
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 - Ripetere macro per celle successive

Postdi Anthony47 » 24/06/10 13:55

Al meglio di quanto ho capito....
Inserisci in un Modulo del vba (es Modulo1) questo cosice, avendo l' accortezza che la riga "Public" sia in testa a ogni altra istruzione:
Codice: Seleziona tutto
Public Pointer As Integer
Sub ClearP()
Pointer = 0
End Sub

Sub xlit()
Dest1 = "D55"
Base1 = "I116"
Sorg2 = "D107"
Base2 = "J116"
'
If Pointer > 20 Then Beep: Exit Sub
Range(Dest1).Value = Range(Base1).Offset(Pointer, 0).Value
Range(Base2).Offset(Pointer, 0).Value = Range(Sorg2).Value
Pointer = Pointer + 1
End Sub

Lancia la macro ClearP quando vuoi resettare il contatore (e ripristinare quindi il copia o incolla sulle celle I-J116); poi lancia la macro xlit: ad ogni esecuzione cambiera' l' origine dei dati che vanno in D55 e la destinazione del dato di D107.

Leggi anche il messaggio di Flash sopra

Ciao, fai sapere.
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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Ripetere macro per celle successive

Postdi xcel2005it » 24/06/10 14:24

KK GRAZIE!

Dal basso della mia conoscenza ho sistemato il vostro lavoro in questo modo e funziona:

ho preso la macro di flash30005 e l'ho modificata così:

Sub CopiaV()
Dim vr(1) As Integer
vr(1) = 55 ' inserire qui il numero riga di D tab 1

For riga = 1 To 6
For RV = 116 To 136
Range("D" & vr(1)).Value = Range("I" & RV).Value
Range("J" & RV).Value = Range("D107").Value
Next RV
Next riga
End Sub


Visto che i risultati di questa macro li devo copiare dalla tabella ed incollarli da un'altra parte faccio che fare una macro per d55, una per d32,d34 ecc.... così lavoro singolarmente sulle tabelle ed evito di far danni XD

poi ho preso la macro di anthony47 ed ho cambiato il valore di reset, perchè a me ne serviva un altro (ovviamente nn potevi saperlo):

Public Pointer As Integer
Sub ClearP()
Pointer = 0
End Sub

Sub xlit()
Dest1 = "D55"
Base1 = "I126"
Sorg2 = "D107"
Base2 = "J126"
'
If Pointer > 20 Then Beep: Exit Sub
Range(Dest1).Value = Range(Base1).Offset(Pointer, 0).Value
Range(Base2).Offset(Pointer, 0).Value = Range(Sorg2).Value
Pointer = Pointer + 1
End Sub

GRAZIE MILLE di nuovo, mi avete risparmiato un bel lavoretto
xcel2005it
Newbie
 
Post: 4
Iscritto il: 23/06/10 14:30

Re: Excel - Ripetere macro per celle successive

Postdi Flash30005 » 24/06/10 14:34

xcel2005it ha scritto:Visto che i risultati di questa macro li devo copiare dalla tabella ed incollarli da un'altra parte faccio che fare una macro per d55, una per d32,d34 ecc.... così lavoro singolarmente sulle tabelle


Ma qual'è il problema?
Li devi copiare su un altro foglio?
Se così, ad ogni loop di riga, si potrebbe cambiare foglio

Ma se a te va bene così, va bene anche per noi :D
Ma non occorre più il loop for riga = 1 to 6 che serviva al vettore vr() che ora può divenire una semplice variabile

VR = 55
o
VR = 32
etc


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 - Ripetere macro per celle successive

Postdi Anthony47 » 24/06/10 22:29

Humm... Se funziona non sto' a chiederti che bisogno hai di copiare in D55 20 valori diversi e non copiargli direttamente I136, ne' perche' non copi direttamente il valore di D107 in J116:J136, ne' che scopo ha il ciclo "For riga = 1 To 6".

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: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Excel - Ripetere macro per celle successive":


Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti

cron