Domanda.

nome=antonio
cognome= xxxxxxxx
versione=2002 (xp)
conosco2=medio
conosco3=buono
vba=SI
macro=SI
email=
problema=Complimenti per il sito.
Ho spesso a che fare con file di excel contenenti anagrafiche le quali sono sistemate in unica colonna nel seguente modo:

NOMINATIVO
INDIRIZZO
TELEFONO
NOMINATIVO
INDIRIZZO
TELEFONO ecc. ecc.

ho fatto una macro che mi prende tre righe la volta e le sistema in un'altro foglio nel seguente modo:

NOMINATIVO | INDIRIZZO | TELEFONO
 
che è esattamente quello che voglio, ma il tutto avviene molto lentamente in quanto tale operazione deve essere ripetuta in alcuni casi anche migliaia di volte (dipende dalla quantità d'anagrafiche), quindi la domanda è questa: esiste un modo per selezionare tutta la colonna, effetuare il copy ed incollare i dati in un altro foglio ottenendo in una sola volta il seguente risultato:
NOMINATIVO | INDIRIZZO | TELEFONO
NOMINATIVO | INDIRIZZO | TELEFONO
NOMINATIVO | INDIRIZZO | TELEFONO ecc. ecc.

Spero d'essere stato chiaro nella spiegazione xchè per me risolvere questo problema è molto importante.
Grazie anticipatamente x la risposta
Antonio.
 

Risposta

ciao antonio ti mando una routine funzionante; ho aggiunto anche istruzioni per controllare il tempo impiegato: con 5000 righe di dati, su un pentium4 a 2400 MHZ ho impiegato 24 secondi. Mi sembra un buon risultato. Controlla sul tuo quanto impiega. Le istruzioni dovresti capirle. D'altra parte è normale, con migliaia di dati, avere tempi lunghi per tutta l'operazione, se poi haiun computer lento...
fammi sapere, ciao, ennius
Sub MacroMia()
Dim D1, D2 As Date
Dim tempoimpiegato As String
D1 = Time
Application.ScreenUpdating = False

Set zona = Range(Range("A1"), Range("A1").End(xlDown))
cont = zona.Rows.Count
For N = 1 To cont Step 3
If Worksheets("Foglio1").Cells(N, 1) <> "" Then
Range(Cells(N, 1), Cells(N + 2, 1)).Select
Selection.Copy

Worksheets("Foglio2").Select
Dim iRow As Integer
iRow = 1
While Cells(iRow, 1).Value <> ""
iRow = iRow + 1
Wend
Cells(iRow, 1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
End If
Worksheets("Foglio1").Select
Next
Application.CutCopyMode = False

D2 = Time
tempoimpiegato = Format(D2 - D1, "hh:mm:ss")
MsgBox "Tempo impiegato: " & tempoimpiegato

End Sub

 

Conferma

Grazie mille ed ancora mille volte,
adesso sul mio pc (AMD XP1700 con 512Mb di Ram) in 28sec riesco ad "allineare" 5000 righe di dati!! mentre prima ci sarebbero volute almeno un paio d'ore o quasi.

Antonio