Condividi:        

Macro per Trasporre righe in 5 colonne alla volta

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

Macro per Trasporre righe in 5 colonne alla volta

Postdi webmaster09gg » 01/07/14 13:30

Salve a tutti, ho il seguente problema come da titolo ho una lista di 100000 righe su un unica colonna e devo trasporle per fare stare queste righe in 5 colonne.
Ho provato a cercare qualcosa su internet di qualche macro per poter fare quello che mi occorre ed ho trovato un codice che dovrebbe aiutarmi:

Codice: Seleziona tutto
Sub Trasposta5 ()
Set zona = Range(Range("A1"), Range("A1").End(xlDown)) 'impostiamo con "zona" i 'riferimenti alla cella iniziale (A1) e a quella finale (A1.End)
cont = zona.Rows.Count 'indi con "cont" si prende il totale delle righe interessate
For N = 1 To cont Step 5   'si inizia il ciclo da 1 fino al numero "cont", con passo 5
If Worksheets("Foglio1").Cells(N, 1) <> "" Then  'se la cella riga N, col. 1 contiene dati
Range(Cells(N, 1), Cells(N + 4, 1)).Select  'si selezionano cinque righe
Selection.Copy  'si copia la selezione dei valori contenuti nelle tre righe

Worksheets("Foglio2").Select 'e si passa al foglio destinazione
Dim iRow As Integer
iRow = 1  'si imposta l'avvio indicando da quale riga iniziare (dalla riga 1)
While Cells(iRow, 1).Value <> "" 'si inizia il ciclo While...Wend cercando una cella vuota
iRow = iRow + 1   ' si incrementa di una riga ad ogni ciclo
Wend
Cells(iRow, 1).Select 'trovata la cella vuota, si seleziona e s'incollano i dati copiati
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
End If
Worksheets("Foglio1").Select  'si ritorna sul foglio con l'elenco di partenza
Next  'e si continua alla terza riga successiva, fino alla fine elenco
Application.CutCopyMode = False  'si elimina il tratteggio sulle celle copiate

End Sub


Questo codice però mi genera un errore 1004 dicendo "Errore nel metodo Select per la classe Range", ora essendo un neofita non riesco a capire il motivo dell'errore, quale può essere il problema?

Grazie a tutti in anticipo.
webmaster09gg
Newbie
 
Post: 6
Iscritto il: 01/07/14 13:18

Sponsor
 

Re: Macro per Trasporre righe in 5 colonne alla volta

Postdi webmaster09gg » 01/07/14 13:31

Aggiungo che utilizzo Excel 2010
webmaster09gg
Newbie
 
Post: 6
Iscritto il: 01/07/14 13:18

Re: Macro per Trasporre righe in 5 colonne alla volta

Postdi ricky53 » 01/07/14 15:01

Ciao,
per 100.000 righe non è proprio il codice ottimizzato: fa la "select" dei fogli e delle celle ad ogni ciclo e poi non viene disattivato l'aggiornamento dello schermo e ...


Quanto tempo impiega prima di darti l'errore ?

In quale riga va in errore?
E' quella evidenziata in giallo quando vai in "Debug"
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: Macro per Trasporre righe in 5 colonne alla volta

Postdi webmaster09gg » 01/07/14 15:40

Ciao, intanto ti ringrazio per avermi risposto, comunque va subito in errore, non riesce a trasporre nessuna riga.
Dal debug per quello che ho capito io mi va in errore alla sesta riga di codice ovvero:
Codice: Seleziona tutto
Range(Cells(N, 1), Cells(N + 4, 1)).Select  'si selezionano cinque righe


Spero che mi possiate aiutare.
Saluti
webmaster09gg
Newbie
 
Post: 6
Iscritto il: 01/07/14 13:18

Re: Macro per Trasporre righe in 5 colonne alla volta

Postdi ricky53 » 01/07/14 15:44

Ciao,
la variabile "N" quanto vale?

Per vedere la variabili: Alt+F11 e vai nell'editor del VB, poi dal menu "visualizza, finestra variabili locali
Esegui il codice, vai in debug e vedi il valore di "N".


Comunque ho provato il codice su un file di esempio che mi sono costruito con 100.000 righe e ... tutto è andato bene ... Però è molto ma molto lento !!!
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: Macro per Trasporre righe in 5 colonne alla volta

Postdi webmaster09gg » 02/07/14 08:05

A me da sempre l'errore e non riesco a capire il motivo, ho fatto come mi hai detto e N vale 1 e poi mi da sempre errore quando esegue:
Codice: Seleziona tutto
Range(Cells(N, 1), Cells(N + 4, 1)).Select  'si selezionano cinque righe


Quando vado a vedere in excel mi trovo nel foglio 2 (anche se io avevo lasciato visualizzato il Foglio 1) e tornando nel foglio 1 vedo le prime 5 righe selezionate e copiate.
Spero che queste informazioni possano essere utili.
webmaster09gg
Newbie
 
Post: 6
Iscritto il: 01/07/14 13:18

Re: Macro per Trasporre righe in 5 colonne alla volta

Postdi webmaster09gg » 02/07/14 08:05

ah, Il foglio 2 rimane vuoto.
webmaster09gg
Newbie
 
Post: 6
Iscritto il: 01/07/14 13:18

Re: Macro per Trasporre righe in 5 colonne alla volta

Postdi ricky53 » 02/07/14 11:48

Ciao,
no.

Prova con un nuovo file e scrivi dei dati (anche la sequenza 1,2,3,4, ... per qualche centinaio di righe e poi esegui la macro.
Poi se proprio vuoi scrivi i dati fino alla riga 100.000 sempre con la sequenza 1,2,3, ecc


Comunque un tuo file di esempio consentirà di trovare l'errore.
Invialo ma ... attenzione ai dati riservati.
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: Macro per Trasporre righe in 5 colonne alla volta

Postdi Anthony47 » 02/07/14 11:54

Guarda il messaggio di Ricky, sopra.

A me da sempre l'errore e non riesco a capire il motivo, ho fatto come mi hai detto e N vale 1 e poi mi da sempre errore quando esegue:
Codice: Seleziona tutto
    Range(Cells(N, 1), Cells(N + 4, 1)).Select  'si selezionano cinque righe
Quando vado a vedere in excel mi trovo nel foglio 2 (anche se io avevo lasciato visualizzato il Foglio 1) e tornando nel foglio 1 vedo le prime 5 righe selezionate e copiate.
Queste informazioni non sono coerenti, considerato il codice della macro.

Non e' che hai il foglio di partenza protetto?

Comunque questa variante dovrebbe essere alquanto piu' veloce:
Codice: Seleziona tutto
Sub Trasposta7()
Sheets("Foglio2").Cells.ClearContents    ' !!! PULISCE TUTTO FOGLIO2
Sheets("Foglio1").Select
Range("A1").Select
'
Application.ScreenUpdating = False
Set zona = Range(Range("A1"), Range("A1").End(xlDown)) 'impostiamo con "zona" i 'riferimenti alla cella iniziale (A1) e a quella finale (A1.End)
cont = zona.Rows.Count 'indi con "cont" si prende il totale delle righe interessate
myTim = Timer
For N = 1 To cont Step 5   'si inizia il ciclo da 1 fino al numero "cont", con passo 5
    If Worksheets("Foglio1").Cells(N, 1) <> "" Then  'se la cella riga N, col. 1 contiene dati
        iRow = Sheets("Foglio2").Cells(Rows.Count, 1).End(xlUp).Row + 1
        Sheets("Foglio2").Cells(iRow, 1).Resize(1, 5).Value = _
          Application.WorksheetFunction.Transpose(Sheets("Foglio1").Cells(N, 1).Resize(5, 1).Value)
    End If
Next  'e si continua alla terza riga successiva, fino alla fine elenco
Application.ScreenUpdating = True
MsgBox ("Completata in (sec): " & Format(Timer - myTim, "0.00"))
'
End Sub

ATTENZIONE:
Foglio2 viene RIPULITO SENZA PREAVVISO all' avvio della macro; se questo non va bene allora modifica o cancella la riga marcata !!!
Ho mantenuto lo schema che controlla se colonna A non e' vuota, anche se credo che sia superfluo, visto che il calcolo dell' ultima riga fatto con End(xlDown) include fino alla prima cella A vuota.

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

Re: Macro per Trasporre righe in 5 colonne alla volta

Postdi webmaster09gg » 02/07/14 14:32

Ciao e grazie a tutti.
Anthony47 questa versione che mi hai postato funziona benissimo, mentre quella che avevo provato prima continua a non funzionare e non capisco il motivo...ma poco importa... :) :) :)

Ti volevo chiedere un ultima cosa, perché quando tento di salvare il file con la macro non mi permette di farlo, mi da un errore, premetto che metto come tipo di file cartella di lavoro con attivazione macro, altrimenti mi dava un altro errore.
E poi se disattivo la macro e la elimino non mi permette lo stesso di salvare normalmete.
Saluti
webmaster09gg
Newbie
 
Post: 6
Iscritto il: 01/07/14 13:18

Re: Macro per Trasporre righe in 5 colonne alla volta

Postdi Anthony47 » 03/07/14 13:36

quella che avevo provato prima continua a non funzionare e non capisco il motivo...ma poco importa...
Se dai informazioni parziali e/o sbagliate non si capira' mai niente; ad esempio:
-pubblichi il codice di una macro
-dici che va in errore una certa istruzione
-dici che quando la macro va in errore il foglio selezionato e' il Foglio2...
-... mentre la prima istruzione che seleziona Foglio2 si trova dopo quella che va in errore

Anche con l' ultima richiesta sei partito allo stesso modo:
-non dici che cosa fai
-dici che hai un errore
-non dici che errore e in che momento

Con questo livello di informazioni io arrivo al massimo a suggerire di formattare il pc, staccargli il cavo di alimentazione ed eventualmente la batteria, e riprovare...

Ma se provi a dare qualche dettaglio "in più" magari ci viene qualche idea ulteriore, magari migliore :D :D

Ti aspettiamo!
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Macro per Trasporre righe in 5 colonne alla volta":


Chi c’è in linea

Visitano il forum: Nessuno e 50 ospiti