Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

copy-destination solo valori

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

copy-destination solo valori

Postdi miko » 16/06/13 21:50

buona sera,
ho cercato una soluzione al seguente problema ma non ho trovato rimedio.
il fine è quello di rendere più spedita l'esecuzione della macro.
in molte celle del foglio 2 ho inserito una identica formula, variando i riferimenti.
lasciando alcune celle alle intestazioni quelle interessate sono disposte ogni 3 righe,
a partire dalla riga 7, e quindi 7,10,13,..
e tutte nelle stesse colonne c-o.
prima di eseguire la macro devo copiare i valori di queste celle nelle rispettive righe adiacenti,
quindi copio il range C7-O7 in R7-AD7 e così di seguito.
usando copy-destination ottengo velocità di esecuzione, ma nelle celle di destinazione ritrovo anche le formule,
con dei riferimenti ad una altra colonna, mentre interessano solo i valori.
la macro che sto usando é:
Codice: Seleziona tutto
.............
For Rig = 7 To 121 Step 3
     Set rngVALORI = .Range("C" & Rig & ":O" & Rig)
         rngVALORI.Copy
      .Range("R" & Rig).PasteSpecial xlPasteValues, Operation:=xlNone, _
                                    SkipBlanks:=False, Transpose:=False
       Application.CutCopyMode = False
   Set rngVALORI = Nothing
   Next Rig
 End With
End Sub
.........

ho provato con il metodo union, ma ottengo errore.
ho pensato allora ad un ciclo con un array del tipo;
Codice: Seleziona tutto
arrini=.Range("C" & Rig & ":O" & Rig)
.Range("r" & Rig & ":ad" & Rig)=arrini

ma è pur sempre un ciclo.
ho provato anche a dimensionare più range, uno per ogni riga interessata, e col metodo union eseguire il copia-incolla,
ma le righe di destinazione si trovano in successione e non distanziate come quelle di partenza.
quello che vorrei realizzare, se si può, è considerare tutto il range di partenza, inserendolo in un array o in qualche altro modo,
e di copiare tutti i valori in un unico processo.
saluti buona notte
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: copy-destination solo valori

Postdi ricky53 » 16/06/13 22:16

Ciao,
non ho capito il tuo problema/esigenza
il primo codice che hai inserito fa la copia/incolla speciale/valori di quanto è inserito in "C:O" ed in "R:AD" avrai solo i valori di "C:O"

A te cosa occorre ?
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: copy-destination solo valori

Postdi Anthony47 » 17/06/13 00:46

Secondo me puoi sostituire la parte pubblicata della tua macro con questa:
Codice: Seleziona tutto
    For Rig = 7 To 121 Step 3
      .Range("R" & Rig).Resize(1, 13).Value = .Range("C" & Rig & ":O" & Rig).Value
    Next Rig
End With
Il tempo di esecuzione e' "alquanto piu' spedito".
E se non e' questo che cercavi allora mi associo alla domanda di Ricky: "A te cosa occorre ?"

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

Re: copy-destination solo valori

Postdi miko » 17/06/13 09:44

buon giorno,
preciso la mia richiesta con una immagine, che per esigenze di dimensioni
ho dovuto ridurre;

Immagine

gli effettivi range di partenza sono dalla riga 7 alla riga 121 step 3
e colonne di partenza C-O;
le righe di destinazione sono identiche, mentre le colonne sono R-AD.
nelle celle interessate ci sono formule, ma devo solo copiare i valori
che le formule producono.
quindi prendo il range C7-O7 ed incollo i valori nel range R7-AD7, (in fig C7-G7 in I7-M7);
poi considero il range C10-O10 ed incollo i valori nel range R10-AD10;
e cosi via fino all'ultima riga 121 la quale contiene un numero di colonne
minore rispetto alle altre, per motiti di disposizione delle celle;
precisamente in riga 121 si ha range di partenza C121-M121 e range di destinazione R121-AB121.
cercavo una diversa soluzione rispetto alla mia, ad esempio del tipo:
Codice: Seleziona tutto
....
Application.Union _
   (.Range("C7:O7"), .Range("C10:O10"), .Range("C13:O13"), ....Range("C121:M121")) _
                                                  .copy   destination:Application.Union _
   (.Range("R7:AD7"), .Range("R10:AD10"), .Range("R13:AD13"), ....Range("R121:AB121"))

ho provato il codice di Anthony, che ovviamente funziona, e misurando i tempi di esecuzione
la mia impiega 250 millisecondi, quella di Anthony appena 16 millisecondi.
E' senz'altro da preferire quella di Anthony sia per velocità che per numero di linee di codice.
se non avete diverse altre soluzioni, con metodo union o array, anche per studio ed applicazioni future
posso ritenere soddifatta la mia richiesta.
grazie saluti
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: copy-destination solo valori

Postdi Anthony47 » 17/06/13 11:59

Solo ad uso didattico, questa usa un array bidimensionale (memorizzato in myVArr) per copiare il contenuto della tabella iniziale ("C1:O131"), da cui, tramite Indice, si estraggono le varie righe da copiare in R:AD. Ma i suoi tempi di esecuzione sono del 50% piu' lunghi della precedente versione (quindi circa 25 msec, secondo i tuoi risutati precedenti).
Codice: Seleziona tutto
Sub pppp3()
Dim myVArr, my1DArr
'
myTim = Timer
With ActiveSheet
'>>>>>>>>
myVArr = .Range("C1:O131").Value
    For rig = 7 To 121 Step 3
        my1DArr = Application.WorksheetFunction.Index(myVArr, rig)
        .Range("R" & rig).Resize(1, 13).Value = my1DArr
    Next rig
End With
'<<<<<
MsgBox (Format(Timer - myTim, "0.000"))
End Sub

La parte da riutilizzare all' interno del tuo codice e' quello compreso tra '>>>> e '<<<<

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

Re: copy-destination solo valori

Postdi miko » 17/06/13 18:21

buona sera,
grazie per la ulteriore versione, era infatti una richiesta ad uso didattico;
data la tua precisazione sui tempi di esecuzione preferisco usare
la prima versione, dal momento che ho problemi di tempo con un altra macro;
ti chiedo solo chiarimenti sul RESIZE, a me ancora non noto;
ciao e grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44

Re: copy-destination solo valori

Postdi Anthony47 » 18/06/13 02:06

Nella macro ho usato "Resize" per ridimensionare un intervallo alla larghezza che mi serviva. Le due istruzioni sono equivalenti:
Codice: Seleziona tutto
.Range("R" & rig).Resize(1, 13)
.Range("R" & rig & ":AD" & rig)

Per la sintassi non c' e' niente di meglio che "invocare" l' help on line del vba: basta F1.

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

Re: copy-destination solo valori

Postdi miko » 18/06/13 08:55

buon giorno,
grazie per la ulteriore spiegazione;
ogni tanto mi capita di consultare l'help, ma ho appreso molto di più
dal forum;
forse il mio help non è corredato a sufficienza oppure sono negato alla comprensione
delle descrizioni in esso riportate.
ciao e grazie
windows xp-office 2003
miko
Utente Senior
 
Post: 422
Iscritto il: 29/12/09 10:44


Torna a Applicazioni Office Windows


Topic correlati a "copy-destination solo valori":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti