Faccio finta che il tuo messaggio delle 15:54 non esista, perche’ da certi punti di vista mi sembra che dici l’ opposto di quanto avevo capito nei post precedenti.
Allora, supponiamo che il tuo obiettivo sia ancora mettere in verticale il contenuto della cella A1 sulla colonna F, poi arrivato in fondo riprendere dalla colonna G, e cosi’ via; il tutto senza usare celle di appoggio sul foglio excel (commento: quale sara’ il vantaggio? Forse c’ e’ carenza di celle libere sul foglio?).
In questo caso, invece della Macro2 che ti avevo dato il 17-7, potresti usare questa, che fa la stessa cosa:
- Codice: Seleziona tutto
Sub Macro4()
OutZona = "F1:L1"
MaxRiga = 5000
ColUsate = WorksheetFunction.Subtotal(3, Range(OutZona))
If ColUsate = 0 Then ColUsate = 1
RigheUsate = WorksheetFunction.Subtotal(3, Range(OutZona).Offset(0, ColUsate - 1).Range("A1" & ":A" & MaxRiga))
If RigheUsate = MaxRiga Then
ColUsate = ColUsate + 1
RigheUsate = 0
End If
Range("A1").Copy
Range(OutZona).Offset(RigheUsate, ColUsate - 1).Range("A1").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End Sub
Come da esigenza, non usa celle di appoggio; usa la funzione Subtotal per calcolare quante righe e colonne sono gia’ state utilizzate, per accodare nel posto giusto il nuovo dato; questo sistema mi sembra piu’ facilmente controllabile del metodo End, che comunque e’ utilizzabilissimo.
Inoltre i dati sono parametrizzati (prime 2 istruzioni), quindi se vuoi una macro che scrive in un range e una che scrive in altro range, basta duplicare la macro e poi cambiargli nome e parametri di esecuzione.
Ciao,