Il mio quesito è molto semplice e forse per molti banale!!Sto cercando
di fare una macro che copi il valore di una cella attiva (es. A1) che
contiene una formula(A1=B1*B2) ogni volta che il valore A1 si
modifica(ossia si immettono nuovi dati nelle celle B1 o B2) e che
incolli poi il valore contenuto in A1 man mano in una colonna (es.
c1,c2,c3,c4,c5). Il ciclo parte solo se la prima riga della
colonna( cioè c1 è vuota). Credo sia necessario un evento
change che ad ogni variazione del valore in A1 lo copi e lo incolli
nella colonna C.
Uso excel ma non sono esperto di vba, ho provato ma non ci sono
riuscito!!
se per la copia volessi mettere un pulsante??si potrebbe fare??
Grazie a tutti!
=============
=============
Nel modulo del foglio (vedi di sotto),
incolla la seguente routine:
========>>
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim srcRng As Range
Dim destRng As Range
Dim Rng As Range
Dim rCell As Range
Dim iRow As Long
Const myCell As String = "A1" '<<=== da CAMBIARE
Const destCol As String = "C:C" '<<=== da CAMBIARE
Set destRng = Me.Range(destCol)
On Error Resume Next
Set srcRng = Me.Range(myCell).Precedents
On Error GoTo 0
If Not srcRng Is Nothing Then
On Error Resume Next
Set Rng = Intersect(srcRng, Target)
On Error Resume Next
If Not Rng Is Nothing Then
If Not IsEmpty(destRng.Cells(1)) Then
On Error GoTo XIT
Application.EnableEvents = False
iRow = LastRow(Me, destRng)
Set rCell = destRng.Cells(iRow).Offset(1)
rCell.Value = Me.Range(myCell).Value
End If
End If
End If
XIT:
Application.EnableEvents = True
End Sub
'<<==========
Si tratta d una routine di evento Worksheet_Change.
Per utilizzarla, con il tasto destro del mouse fai click
sulla linguetta del foglio, scegli "Visualizza codice" e
nella finestra del codice incolla la routine.
Alt-F11 per tornare in Excel
In un modulo standar (vedi di sotto),
incolla la seguente funzione:
'=========>>
Option Explicit
Function LastRow(SH As Worksheet, _
Optional Rng As Range)
If Rng Is Nothing Then
Set Rng = SH.Cells
End If
On Error Resume Next
LastRow = Rng.Find(What:="*", _
After:=Rng.Cells(1), _
LookAt:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
'<<=========
Ora, con le celle indicato da te, se il valore
delle celle B1 o B2, cambia, il nuovo valore
della cella A1 va aggiunta dopo l'ultima celle
popolato nella colonna C. Tuttavia, se la cella
C1 e' vuota, niente succede.
Quindi, per iniziare la populazione della colonna
C, devi inserire un valore qualunque in C1.
---
Regards.
Norman
"Norman Jones" wrote:
> Norman grazie mille per la macro!!! così com è funziona!!
ma ho dovuto cambiare le posizioni delle celle nel foglio di calcolo. Se
volessi che la populazione della colonna iniziasse da D10,D11;D12 e così via
e che la partisse solo se la prima cella D10 è vuota?? Ho provato a cambiare
le righe ma così facendo mi sa che ho stravolto il codice!!
Grazie Ciao