Condividi:        

[Excel] Copiare colonne nello stesso foglio m volte

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] Copiare colonne nello stesso foglio m volte

Postdi gik » 25/09/06 10:31

Salve a tutti, esperti e meno esperti, un problema che credo sia facile da risolvere:

In un foglio (2) ho n colonne (ad esempio dalla B alla M)
in esse ci sono delle formule con dei riferimenti a un'altro foglio (1).

Vorrei creare una macro che copi le n colonne mvolte e le incolli a destra delle originali (lasciando 1 o 2 colonne vuote) mantenendo le stesse funzioni delle originali, ma con i riferimenti traslati.

Ad esempio vorrei copiare le colonne B:M in P:AA
e poi in AD:AO eccetera, questo per m volte, dove m è un numero posto diciamo nella cella O1 del foglio (1)
Vorrei copiare le funzioni contenute nelle colonne mantenendo i riferimenti relaivi, perciò se nella colonna originale presente nel foglio (1)avevo B1='(1)'!B1 ricopiandola dovrei avere che P1='(1)'!P1

Semplicemente.

In un altro foglio invece devo mantenere esattamente gli stessi riferimenti, non traslati (penso si possa fare con la stessa macro utilizzando i simboli dollaro opportunamente nelle formule delle colonne iniziali)

Sapete qual'è il limite di colonne di excel?
Operando in questo modo rischio di mandare in tilt il programma se m è troppo grande?
Cosa mi consigliate per ovviare al problema?

Grazie mille,
a presto
GiK
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Sponsor
 

Postdi Anthony47 » 25/09/06 16:14

Ciao GIK,
puoi fare quanto chiedi nella prima domanda con la seguente macro:
Codice: Seleziona tutto
Sub RicopiaGIK()
CStart = "B1"   '<<< Cambaire se necessario
Ctot = "B:M"    '<<< Cambaire se necessario

ColOffs = Range(Ctot).Columns.Count + 2
Range(Ctot).Select
Selection.Copy
For I = 1 To Range("O1").Value
  Range(CStart).Offset(0, I * ColOffs).Select
  ActiveSheet.Paste
Next I
Application.CutCopyMode = False
End Sub


Per mantenere gli stessi riferimenti, ci sono vari modi, oltre l’ uso del $ nella formula di partenza. Per fare una proposta avrei bisogno di sapere se le formule delle celle di partenza (diciamo B:M) sono tutte uguali ma con indirizzamento relativo (quindi, se B1=Foglio1!B1, B2=Foglio1!B2, B3=Foglio1!B3, etc; e poi C1=Foglio1!C1, C2=Foglio1!C2, etc) o se ogni cella puo’ avere una formula diversa; e se l’ altezza di ogni colonna (numero di righe) e’ costante nel range B:M o se ogni colonna puo’ avere un numero di righe diverso.

Excel puo’ gestire 256 colonne per foglio, da A a IV; il numero di righe e’ di 65536, quindi eventualmente potresti organizzare i dati in verticale invece che orizzontale.

Sospendo la mia partecipazione al forum, un saluto a tutti gli Utenti.

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

Postdi gik » 27/09/06 09:41

Grazie ancora per la risposta, precisa come al solito :)

E se invece volessi operare con le righe?

Codice: Seleziona tutto
Sub RicopiaRighe()
RStart = "A6"   '<<< Cambaire se necessario
Rtot = "6:17"    '<<< Cambaire se necessario

RigOffs = Range(Rtot).Raws.Count + 2
Range(Rtot).Select
Selection.Copy
For I = 1 To Range("O1").Value
  Range(RStart).offset(0, I * RigOffs).Select
  ActiveSheet.Paste
Next I
Application.CutCopyMode = False
End Sub



Potrebbe funzionare modificata in questo modo?

Volendo inserire una cella contatore in cui indicare per ogni tabella copiata il numero corrispondente?

Chiaramete queste celle dovranno essere relative alle tabelle copiate, perciò dovranno mantenere la stessa posizione relativa.

Per ogni ciclo for dovrei creare una cella con un contatore e questa cella è posta in A5 nella tabella originale con il valore 1, dopodiché dovrà apparirne una in A19 col valore 2 e così via.

Grazie ancora,
GiK
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi gik » 27/09/06 09:59

RigOffs = Range(Rtot).Raws.Count + 2


Chiaramente intendevo "rows", scusate.

Purtroppo con questa macro il debug mi individua un errore sulla riga
Codice: Seleziona tutto
ActiveSheet.Paste


Infatti la macro seleziona le righe, ma non le copia.
Qualcuna può indicarmi il perché?
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi Anthony47 » 27/09/06 13:19

QUASI perfetta, quasi.
Volendo lavorare sulle righe anziche' sulle colonne devi infatti invertire anche gli indici dell' istruzione "Offset", che quindi sara':
Codice: Seleziona tutto
  Range(RStart).Offset(I * RigOffs, 0).Select


L' intera macro quindi e':
Codice: Seleziona tutto
Sub RicopiaRighe()
RStart = "A6"   '<<< Cambiare se necessario
Rtot = "6:17"    '<<< Cambiare se necessario

RigOffs = Range(Rtot).Rows.Count + 2
Range(Rtot).Select
Selection.Copy
For I = 1 To Range("O1").Value
  Range(RStart).Offset(I * RigOffs, 0).Select
  ActiveSheet.Paste
Next I
Application.CutCopyMode = False
End Sub


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

Postdi gik » 27/09/06 15:23

Vero, che stupXXo!
Grazie ancora
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi gik » 27/09/06 16:34

Ho risolto per il contatore :lol:
" ... e come il sol che fulvo scema attergo il cupo mare, negli occhi miei, tu, riverberi radiosa"
GIK
gik
Utente Junior
 
Post: 86
Iscritto il: 18/07/06 16:41
Località: Gaeta

Postdi vg » 24/08/07 18:05

mi rivolgo ad Anthony47 in particolare perche' ha dato una risposta precedentemente che vorrei approfondire... ma se qualcun altro sa rispondermi e' ben gradito comunque.
Il limite fisiologico di colonne e' sino ad IV... sai se c'e' modo di ampliarlo?
Mi trovo nella necessita di avere molte piu' colonne molto strette... e non sono riuscita a trovare nulla in merito.
Speravo che le versioni piu' aggiornate di excel lo prevedessero!
Grazie
Vanna
vg
Utente Junior
 
Post: 30
Iscritto il: 24/08/01 01:00
Località: asti

Postdi Anthony47 » 26/08/07 22:28

Ciao Vanna,
credo che Excel 2007 gestisca 16000 e passa colonne; o te ne servono di più?

Se il file deve essere scambiato con altri utenti, visto che questa caratteristica non e’ compatibile con le versioni precedenti, io suggerirei di valutare una diversa organizzazione dei dati; es in riga invece che in colonna (o forse dovrei dire il contrario…) oppure suddividendoli tra Foglio1, Foglio2, etc.

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

Postdi vg » 27/08/07 08:06

Grazie. Io sono ferma al 2003. Vedro' se vale la pena aggiornare o meno.
Il file non lo debbo scambiare con altri per fortuna ma debbo stamparlo.
Ho cercato anche di invertire ma il risultato non e' soddisfacente perche' ho una descrizione molto lunga che in verticale non rende bene.
Ci lavorero' su.
vg
Utente Junior
 
Post: 30
Iscritto il: 24/08/01 01:00
Località: asti


Torna a Applicazioni Office Windows


Topic correlati a "[Excel] Copiare colonne nello stesso foglio m volte":


Chi c’è in linea

Visitano il forum: Nessuno e 23 ospiti