In pratica A9:CP9 ha dei valori.
A10:CP10 delle formule che sono valutate con valori della riga
precedente.
Io vorrei "trascinasse" le formule alla riga 11, ovvero riempisse la
riga 11 con le stesse formule ma calcolate coi dati della riga 10.
Il processo è iterativo (cioè la riga 12 è valutata dalla 11 e così
via).
Ciò deve avvenire per n righe, dove n lo legge da una cella.
L'idea è di fare un ciclo for che va da 11 (la prima riga del ciclo)
alla riga 11+n.
Purtroppo non riesco a formalizzare la mia routine.
Qualcuno mi può aiutare?
Sub Test()
Dim lRows As Long
lRows = Range("G1")
Range("A10:CP10").AutoFill _
Destination:=Range("A10:CP" _
& Range("A10").Row + Range("G1")), _
Type:=xlFillDefault
End Sub
Ciao Elio
Innanzi tutto grazie.
Però non ho capito e ora non excel per fare delle prove.
La cellla G1 contiene un integer con il numero delle righe da
riempire?
Cioè se la cella G1 = 7, riempie fino a A17:CP17 ?
Ma la variabile lRows nel tuo script, dopo essere assegnata, quando
viene richiamata?
O non è necessario?
Volevo un po' capire la logica di VBA.
Grazie ancora
che comumque funziona.
Ovviamente l'intenzione originaria era di scriverla così:
Sub Test()
Dim lRows As Long
lRows = Range("G1") '<Da cambiare
Range("A10:CP10").AutoFill _
Destination:=Range("A10:CP" _
& Range("A10").Row + lRows), _
Type:=xlFillDefault
End Sub
..che comunque funziona..
A tutte le tue domande la risposta è sì
Ciao Elio
Il problema è che ogni volta però riprende a "tirare giù" dalla prima
riga.
Se le righe sono tante, diciamo 300, può allungare troppo i tempi?
Rispetto al mio commento precedente, come si può modificare il codice,
in questo senso:
1.Dimmi la riga che vuoi Nstart
2.Dimmi per quante righe sotto la devo copiare lRows
2.Copio le formule della riga Nstart alla riga Nstart+lRows
Questo mi semplificherebbe la vita per future applicazioni.
Grazie.
=============================================
Public Sub CopyFormulas()
Dim SourceRange As Range, TargetRange As Range
Dim NumRow As Integer, i As Integer
Set SourceRange = [Sheet2!A2:G2]
Set TargetRange = [Sheet2!A3]
NumRow = 10
For i = 1 To NumRow
SourceRange.Copy Destination:= _
Range(TargetRange(i, 1), TargetRange(i, 7))
Next
End Sub
===========================================
Bruno
No
> Rispetto al mio commento precedente, come si può modificare il codice,
> in questo senso:
> 1.Dimmi la riga che vuoi Nstart
Basta fare un riferimento dinamico anche per la riga di partenza
che da .....Range("A10:CP10").AutoFill ....
diventa
Range("A" & Nstart & ":CP" & Nstart).Autofill
dove Nstart è una variabile che pesca da una cella sul foglio di
lavoro ( codice omesso )
se però Nstart è nei fatti l'ultima riga del foglio allora si può
arricchire il codice con la determinazione automatica dell'ultima
riga.
> 2.Dimmi per quante righe sotto la devo copiare lRows
Come prima
> 2.Copio le formule della riga Nstart alla riga Nstart+lRows
Solito metodo autofill
A meno di non ricorrere al metodo di Bruno che, peò dovrebbere essere
più lento e , quindi risentire di un rallentamento se le righe sono
tante
Ciao Elio