La macro postata da Ribonix l’ ho provata e funziona nelle condizioni descritte da marcopont; aggiungerei solo in testa
- Codice: Seleziona tutto
Sheets("Foglio1").Activate
per assicurare che ULTIMA_RIGA sia calcolata correttamente.
Inoltre, per sfiducia verso il calcolo fatto di Excel di UsedRange (e su questo chiedo l’ opinione di Ribonix), tendo a calcolare l’ ultima cella col metodo .End(xlUp), quindi avrei scritto:
ULTIMA_RIGA = Range("A65536 ").End(xlup).Row
Non gestisce l’ eventuale doppia interlinea.
Se la doppia interlinea fosse un problema, questa macro gestisce anche questa situazione:
- Codice: Seleziona tutto
Sub marcop()
Sheets("Foglio1").Activate
For Each Cella In Range("A1", Range("A65536").End(xlUp))
If Cella = "" Then
CBlank = CBlank + 1
Else
Cella.Copy Destination:=Sheets("Foglio2").Range("A1").Offset(1 + Int((Cella.Row - CBlank - 1) / 4), OffCol)
OffCol = (OffCol + 1) Mod 4
End If
Next Cella
End Sub
I dati vengono scritti su Foglio2 da riga 2 in giu', nell' ipotesi che riga 1 sia per i titoli di colonna; se preferisco scrivere da riga 1, allora trasforma questa parte
...Offset(1 + Int((Cella.Row - etc etc
in
- Codice: Seleziona tutto
....Offset(Int((Cella.Row - etc etc
Ciao, fai sapere.