Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Range macro righe variabili

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

Range macro righe variabili

Postdi libraio » 07/02/14 21:46

Ciao a tutti,
sono ancora una volta a chiedere il vostro aiuto prezioso.
Vorrei modificare il codice di una macro scritto con il sistema empirico "registra nuova macro".
La riga che dovrei modificare concerne il contatore righe Excel; attualmente appare:
Range("A2:A140").Select
ma il range di righe interessato varia secondo i dati inseriti nel foglio di volta in volta.
Io non ricordo più come si inserisce il contatore delle righe piene :oops:
Spero di essere stato chiaro... e attendo fiducioso
Grazie
libraio
Utente Senior
 
Post: 211
Iscritto il: 04/01/10 20:31

Sponsor
 

Re: Range macro righe variabili

Postdi libraio » 07/02/14 21:47

Dimenticavo:
S.O. Windows 7
Excel 2003
libraio
Utente Senior
 
Post: 211
Iscritto il: 04/01/10 20:31

Re: Range macro righe variabili

Postdi Flash30005 » 08/02/14 00:40

Codice: Seleziona tutto
UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row

Dove Foglio1 è il nome del foglio che puoi omettere purché sia attivo il foglio interessato
e la colonna A è la colonna di riferimento per il conteggio delle righe "piene"
se la colonna A non è utilizzata cambia la lettera-colonna

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: Range macro righe variabili

Postdi libraio » 08/02/14 11:20

Grazie Flash,
ma non riesco ad applicare la riga che mi hai indicato (!)

La macro che dovrei modificare è la seguente, applicata sul Foglio3, ed attualmente limitata a 140 righe:

Codice: Seleziona tutto
Range("A2").Select
    Sheets("Foglio1").Select
    Range("D2:D140").Select
    Selection.Copy
    Sheets("Foglio3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("C2").Select
    Sheets("Foglio1").Select
    ActiveWindow.SmallScroll Down:=-138
    Range("F2:F140").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Foglio3").Select
    ActiveSheet.Paste
    Sheets("Foglio1").Select
    ActiveWindow.SmallScroll Down:=-135
    Range("E2:E140").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Foglio3").Select
    Range("D2").Select
    ActiveSheet.Paste
    Range("E2").Select
    Sheets("Foglio1").Select
    ActiveWindow.SmallScroll Down:=-105
    Range("G2:G140").Select
    Application.CutCopyMode = False
    Sheets("Foglio1").Select
    Selection.Copy
    Sheets("Foglio3").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Columns("A:E").Select
    Columns("A:E").EntireColumn.AutoFit
    Application.CutCopyMode = False
End Sub
libraio
Utente Senior
 
Post: 211
Iscritto il: 04/01/10 20:31

Re: Range macro righe variabili

Postdi ricky53 » 08/02/14 11:33

Ciao,
con l'istruzione di Flash modifica la seguente
Codice: Seleziona tutto
Range("D2:D140").Select


in
Codice: Seleziona tutto
UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row
Range("D2:D & UR").Select


Questa va applicata al "Foglio1" provvedi tu a modificare il resto adattando il nome del foglio
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Range macro righe variabili

Postdi Anthony47 » 08/02/14 13:49

Se non sbaglio tu copierai da Foglio1 a Foglio3 le colonne D (in A?), F (in C), E (in D), G (in E).

Nell' incertezza che le varie colonne possano avere una altezza diversa (cioe' ognuna finire su una riga diversa, e quindi dover ricalcolare "UR" su ogni colonna) potresti calcolare una sola volta, in testa alla macro, l' ultima riga usata delle colonne (D:G) di Foglio1 con l' istruzione
Codice: Seleziona tutto
LRng = Evaluate("=Max(if(Foglio1!D2:G2000<>"""",row(D2:G2000),""""))")

Poi invece di scrivere , per esempio, Range("D2:D140").Select scriverai
Codice: Seleziona tutto
Range("D2:D" & LRng).Select


Perfetto l' uso di registra macro per automatizzare le operazioni ripetitive, e poi aggiungere piccoli miglioramenti prestazionali come stiamo facendo in qusto caso.

Quando funzionera' tutto ti faremo vedere come puoi ulteriormente migliorare la macro ottenuta; al momento comincia a cancellare tutte le righe " ActiveWindow.SmallScrol xyz"

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

Re: Range macro righe variabili

Postdi libraio » 08/02/14 16:28

Ringrazio Ricky per la sua soluzione, ma poi si è unito Anthony! Che dire? "Ubi maior..."
Fantastico, problema risolto.
A questo punto "oso" chiedere un altro contatore righe piene per una macro che genera i barcode. Il contatore dovrebbe sustituire le solite 140 righe:

Columns("B:B").Select
Selection.Insert Shift:=xlToRight
Range("B2").Select
ActiveCell.FormulaR1C1 = "=EAN13(RC[-1])"
Range("B2").Select
Selection.AutoFill Destination:=Range("B2:B140")
Range("B2:B140").Select

Con tutta la mia stima per la vostra disponibilità.
libraio
Utente Senior
 
Post: 211
Iscritto il: 04/01/10 20:31

Re: Range macro righe variabili

Postdi Anthony47 » 08/02/14 20:43

Mi pare che devi riempire di formule tutte le righe che hanno un contenuto in colonna A; per calcolare l' ultima riga di colonna A vanno bene tutte le istruzioni che ti sono state presentate, es:
Codice: Seleziona tutto
UR = Worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row

Poi invece di Selection.AutoFill Destination:=Range("B2:B140") metterai
Codice: Seleziona tutto
Selection.AutoFill Destination:=Range("B2:B" & UR)


Ti avevo detto di possibili semlificazioni al codice della precedente macro...
Con riferimento al tuo listato, immagino che al momento della tua Range("A2").Select il foglio attivo sia Foglio3.
Allora, invece di
Range("A2").Select
Sheets("Foglio1").Select
Range("D2:D140").Select
Selection.Copy
Sheets("Foglio3").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Puoi usare direttamente
Codice: Seleziona tutto
Sheets("Foglio1").Range("D2:D140").Copy
Sheets("Foglio3").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
Mentre gli step successivi possono diventare
Codice: Seleziona tutto
    Sheets("Foglio1").Range("F2:F140").Copy Destination:=Sheets("Foglio3").Range("C2")
    Sheets("Foglio1").Range("E2:E140").Copy Destination:=Sheets("Foglio3").Range("D2")

Lascio a te indovinare come articolare la copia di G2:G140.

La controindicazione di queste abbreviazioni e' una minore semplicita' di debugging, in quanto procedendo eventualmente in passo-passo (con F8) non vedi i passi intermedi ma solo l' esito finale.
Se Foglio3 e' il foglio attivo al momento della macro (cosa che puoi ottenere con Sheets("Foglio3").Select allora specificare "Foglio3" nella macro puo' essere superfluo, quindi ad esempio puoi scrivere direttamente Destination:=Range("D2")

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

Re: Range macro righe variabili

Postdi libraio » 09/02/14 19:38

Grazie Anthony.
Per quanto riguarda la prima parte della tua risposta (contatore ultima riga), ho applicato le tue indicazioni con successo.
La seconda parte mi pare più ostica e, soprattutto, ricompare il numero di righe (140) fisso, da cui si muoveva il mio problema, perché i dati da elaborare, in modo ripetitivo, occupano di volta in volta un numero di righe diverse, che si ripercuote su più fogli della cartella di lavoro.
Come sempre sei stato perfettamente risolutivo (ed io sono contento del "nostro" lavoro...)
una saluto e... attento alla arance prossime! ;)
libraio
Utente Senior
 
Post: 211
Iscritto il: 04/01/10 20:31

Re: Range macro righe variabili

Postdi Anthony47 » 10/02/14 01:33

Beh, come modificare "140" in una riga variabile l' hai gia' imparato, dove sta il problema?? :D :D

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

Re: Range macro righe variabili

Postdi libraio » 10/02/14 14:01

Ineccepibile!
Grazie
libraio
Utente Senior
 
Post: 211
Iscritto il: 04/01/10 20:31


Torna a Applicazioni Office Windows


Topic correlati a "Range macro righe variabili":


Chi c’è in linea

Visitano il forum: Nessuno e 46 ospiti