Condividi tramite

excel: incrementare il valore in un cella in funzione della diminuzione del valore dell'altra cella

Anonimo
2019-04-24T23:02:25+00:00

Salve, avrei bisogno di una formula o di una macro che gestisca quanto in oggetto.

Mi spego meglio... mettiamo caso che in una cella ho un valore/numero pari a 9. Ora, quando questo valore cambia (solo a decrescere), vorrei che in un'altra cella venga registrata questa variazione. Cioè se nella cella di riferimento ho 9 e poi passo a 7, in un'altra cella deve essere visualizzato 2. Se da 9, passo a 8, nell'altra cella devo avere 1, perchè la diminuzione appunto è stata di 1. Nel caso in cui da 9 passo, per esempio, a 5 (quindi variazione rilevata = 4) ma dopo da 5 passo di nuovo a 9, non ci deve essere incremento nell'altra cella. In sostanza, mi deve registrare la variazione solo quando dal numero della cella di riferimento si va a decrescere.

Ringrazio anticipatamente chi vorrà aiutarmi in questa impresa

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

5 risposte

Ordina per: Più utili
  1. Anonimo
    2019-04-25T10:05:13+00:00

    Ancora un'altra cosa... nella cella di riferimento dove avvengono le variazioni che poi aloro volta vengono conteggiate in una successiva cella, io avevo inserito la formula "conta.se" la quale va a leggere delle variazioni che avvengono in una tabella. Ecco, se io lascio quella formula ed inserisco il codice di cui sopra, il conteggio a decrescere non funziona. Se inserisco le variazioni a mano e, quindi, senza la formula cerca.se, il tutto funziona. Esiste il modo di avere insieme la formula sulla stessa cella di riferimento del codice VBA? (in questo caso la cella "C2")

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2019-04-25T09:48:22+00:00

    E' semplicemente perfetta! Ti ringrazio di cuore... gli ho fatto il debug con esegui istruzione ed ha funzionato alla grande.

    Non vorrei approfittare della tua disponibilità, ma vorrei chiederti solo un'altra cosa: se nel codice volessi inserire un reset automatico al primo gennaio di ogni anno, si può fare? Cioè, nella cella dove avviene il conteggio degli incrementi a decrescere, dopo il 31/12 di ogni anno, dovrebbe avvenire un reset e ripartire da zero.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2019-04-25T09:09:35+00:00

    ciao

    ALT F11

    per aprire l'editor vba

    doppio click sul foglio dove la vuoi

    e incollala

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2019-04-25T09:05:33+00:00

    Ti ringrazio per la pronta e celere risposta.

    A occhio e croce dovrebbe andar bene la prima soluzione.

    L'unica cosa è che non sono riuscito a farlo funzionare in quanto nel momento in cui lo provo con ALT+F8, una finestra mi chiede di assegnare il nome alla macro ma nel momento in cui lo assegno, mi aggiunge in automatico, nel modulo VBA, la stringa Sub + nome macro.

    Ovviamente ho abilitato, nella finestra Editor VBA, dal menu Strumenti seleziona "Opzioni": "dichiarazioni di variabili obbligatoria"  per poter utilizzare "optionexplicit".

    Non riesco a capire dove sbaglio.

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Gianfranco55 25,190 Punti di reputazione Moderatore volontario
    2019-04-24T23:51:07+00:00

    ciao

    se ho capito

    se vuoi che si sommino le differenze

    Option Explicit

    Public Val As Long

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range("C2")) Is Nothing Then Val = Target.Offset(0, 0)

    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("C2")) Is Nothing Then

    If Target.Offset(0, 0) < Val Then

    Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Val - Target.Offset(0, 0)

    End If

    End If

    End Sub

    se vuoi solo l'ultimo valore

    Option Explicit

    Public Val As Long

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Not Intersect(Target, Range("C2")) Is Nothing Then Val = Target.Offset(0, 0)

    End Sub

    Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, Range("C2")) Is Nothing Then

    If Target.Offset(0, 0) < Val Then

    Target.Offset(0, 1).Value = Val - Target.Offset(0, 0)

    End If

    End If

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento