|
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
|