vba somma valore da stessa cella



  • vba somma valore da stessa cella di alessandro (utente non iscritto) data: 05/01/2017 21:22:25

    Vorrei risolvere un problema che potrei forse risolvere con una macro in vba. Ho una cella (A1 nel foglio 1) il cui valore viene immesso manualmente dall'utente e il suo limite massimo pari a 12 [s farlo]. Questo valore deve essere copiato in un'altra cella sempre A1 ma nel Foglio2, quando il valore di una terza cella (b2 del foglio 3) uguale a 1. Fino a qua so come impostare la funzione. Il problema sorge quando il valore della cella B2 del foglio 3 viene incrementato di 1; reinserendo un valore casuale, ma sempre compreso fra 1 e 12 ,nella cella A1 del foglio 1 questo si deve sommare al valore precedentemente immesso nella cella A1 ma del foglio 2. Praticamente la cella A1 foglio 1 sempre modificabile a caso da 1 a 12 mentre la cella A1 foglio 2 deve essere sempre la somma dei valori precedentemente immessi.
    Per sicurezza vorrei che una volta eseguita la funzione richiesta precedentemente tra le celle A1, se la cella B2 del foglio3 rimane uguale, se andassi a modificare il valore della cella A1 del foglio 1 gia stato sommato non si vada a sommare
    es.
    [a1 foglio1]=4 [a1 foglio1]=2 [a1 foglio1]=10
    [a1 foglio2]=4 [a1 foglio2]=4+2 [a1 foglio2]=6+10
    [b2 foglio3]=1 [b2 foglio3]=2 [b2 foglio3]=3
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myTab1 As String
    '
    myTab1 = "a1"
    '
    If Not Application.Intersect(Target, Range(myTab1)) Is Nothing And Sheets("foglio3").Range("b3").Value = 1 Then
            Range(myTab1).Copy Destination:=Sheets("foglio2").Range("ha1")
            
    End If
    End Sub


  • di Luca73 data: 10/01/2017 09:33:12

    Ciao
    Se ho caputo bene dovrebbe essere qualcosa del genere
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myTab1 As String
    '
    myTab1 = "a1"
    '
    If Not Application.Intersect(Target, Range(myTab1)) Is Nothing then
            If Sheets("foglio3").Range("b3").Value = 1 Then
                    Range(myTab1).Copy Destination:=Sheets("foglio2").Range("a1")
            else
                    Sheets("foglio2").Range("a1").value=Sheets("foglio2").Range("a1").value+Range(myTab1).value
                    Sheets("foglio3").Range("b3").Value=Sheets("foglio3").Range("b3").Value+1 
            end if
    End If
    End Sub
    


  • di alessandro (utente non iscritto) data: 10/01/2017 19:28:01

    mi segna in giallo questa riga
    Sheets("foglio3").Range("b3").Value=Sheets("foglio3").Range("b3").Value+1
    oppure si pu fare che sempre nella casella A1 del foglio 1 si possano immettere i valori e te li copi in colonna partendo dalla cella a1 del foglio 2 quando la cella b1 del foglio 3 avanzi di valore? io ne avevo scritta una che me la copiava sotto ma erano 120 macro da fare ed erano troppe per vba

    legenda
    la macro messa nel sheet del foglio 1, h29:k29 = a1
    barbaro=foglio3 e b8=b1
    tiri nascosti = foglio2 e range h29=a1
     
    Dim myTab12 As String
    '
    myTab12 = "H29:K29"
    '
    If Not Application.Intersect(Target, Range(myTab12)) Is Nothing And Sheets("Barbaro").Range("b8").Value = 1 And Sheets("tiri nascosti").Range("h29").Value = "" Then
            Range(myTab12).Copy Destination:=Sheets("tiri nascosti").Range("h29")
            


  • di Luca73 data: 11/01/2017 08:29:40

    Ciao.
    1) se la mia macro ti d errore, spiega quale errore ti d
    2) Non capisco quale sia il tuo problema cerca di spiegarti meglio.
    3) se alleghi un file (anche semplificato) ma von le strutture giuste, rendi pi semplice il compito di chi vuole aiutarti.


  • di alessandro (utente non iscritto) data: 11/01/2017 14:04:45

    ho allegato il file "esempio" nella discussione. Questa sarebbe la digitalizzazione di una scheda di un gioco cartaceo. il manuale dice "quando il tuo personaggio al livello1 (scheda barbaro cella b8) lancia un dado per determinare quanta vita hai di base che poi si vanno a sommare altri criteri" e poi dice "ad ogni avanzamento di livello devi tirare un dado per vedere quanto ti sale la vita"
    Per questo ho optato per un copia-incolla della cella h29 (cella di riferimento per il lancio del dado del barbaro).
    Avevo pensato di copiare la singola cella quando il barbaro al livello 1 nella scheda "tiri nascosti"sempre in h29, quando al 2 di copiare il contenuto nella cella sottostante e cosi via fino al livello 20(possibilmente con la verifica se la cella di riferimento dell'incolla vuota) cosi nella cella della vita andavo a mettere semplicemente =sum("tiri nascosti"h29:h49) e cosi per ogni altra classe.
    Spero di essere stato abbastanza chiaro in quello che vorrei al massimo cerco di esserlo ancora di piu.


  • di Luca73 data: 11/01/2017 14:16:41

    Non ho ben capito quali azioni fai e cosa vuoi ottenere.
    per provo adarti un consiglio
    se ogni volta cambi la formula della vita totale aggiungendo il nuovo punteggio
    Ovvero
    1) = 2
    2)= 2+3
    3)=2+3+7
    4)=2+3+7+4
    basterebbe scrivere quoalcoladel genere
    Range(pippo).formula=range(pippo).formula & "+" & Range(pluto).value

    Ti aviti cos un foglio di appoggio


  • di alessandro (utente non iscritto) data: 11/01/2017 15:06:19

    Allora si sviluppa cosi. Apri il foglio, selezioni quale classe scegliere (tramite workbook, non presente nella versione che ho passato) e ti toglie le altre 10 classi.
    Al livello 1 non c' da fare nulla.
    All'avanzamento di livello ritiri il dado (esce 6) lo inserisci nella cella PF della classe scelta e quel nuovo valore si v a sommare nella cella AK14.
    Io volevo utilizzare un foglio di supporto per cercare di semplificare il tutto. Avevo pensato che se B8 =2 me lo metti in una determinata cella, se b8 =3 me lo mette sotto alla cella precedentemente scelta e cosi via fino al 20 e l'avevo fatto per tutte 11 le classi ma erano 209 macro e vba non le riusciva a gestire tutte.
    Cito il manuale che forse schiarisce il tutto

    "Per il suo primo dado vita, un personaggio di 1* livello ottiene il massimo dei punti ferita invece che tirare il dado (ci nonostante, i modificatori di Costituzione, in pi o in meno, si applicano). Per esempio,Vadania ha dado vita 8 poich una druida. Al 1* livello ottiene 8 punti ferita invece che tirare. Dal momento che ha un punteggio di Costituzione di 13, applica un modificatore di +1 e i suoi punti ferita diventano 9. Quando raggiunge il 2* livello (e qualsiasi successivo), il giocatore di Vadania tira un dado a 8 facce, aggiunge 1 (per il suo modificatore di costituzione) e poi somma il totale ai punti ferita di Vadania"

    Quindi mi servirebbe qualcosa dove mettere i lanci dei dadi dal livello 2 al 20 in modo che poi si vadano a sommare al modificatore di costituzione


  • di Luca73 data: 11/01/2017 15:10:32

    Ma tu vuoi mantenere tutta la storia oppure ti basta la somma?
    Basterebbe usare una sub worksheet change con target quella cella che, quando cambia, scatena la macro e va a cambiare la cella che vuoi.


  • di Luca73 data: 11/01/2017 15:16:56

    Comunque rimane non chiaro come procedere.
    Non interessa il gioco. Interessa Excel e VBA

    CIt.:"All'avanzamento di livello ritiri il dado (esce 6) lo inserisci nella cella PF della classe scelta e quel nuovo valore si v a sommare nella cella AK14. "

    Come procedi o vuoi procedere? , in automatico, premendo un pulsante, cambiando una cella?
    Cella AK 14 di che foglio?

    Tu probabilmente hai tutto in testa. Noi NO.

    Io per esempio non jo capito perche vuoi usare il foglio di appoggio e come.

    Ciao
    Luca


  • di alessandro (utente non iscritto) data: 11/01/2017 18:27:43

    ho risolto con 19 macro di questo tipo. grazie per i tentativi di capire quello che volevo spiegare
     
    Dim myTab14 As String
    '
    myTab14 = "h29:bi31"
    '
    If Not Application.Intersect(Target, Range(myTab14)) Is Nothing And Sheets("Stregone").Range("b8").Value = 2 Or Sheets("barbaro").Range("b8").Value = 2 Or Sheets("bardo").Range("b8").Value = 2 Or Sheets("chierico").Range("b8").Value = 2 Or Sheets("druido").Range("b8").Value = 2 Or Sheets("guerriero").Range("b8").Value = 2 Or Sheets("ladro").Range("b8").Value = 2 Or Sheets("mago").Range("b8").Value = 2 Or Sheets("monaco").Range("b8").Value = 2 Or Sheets("paladino").Range("b8").Value = 2 Or Sheets("ranger").Range("b8").Value = 2 Or Sheets("stregone").Range("b8").Value = 2 And Sheets("tiri nascosti").Range("h32").Value = "" Then
            Range(myTab14).Copy Destination:=Sheets("tiri nascosti").Range("h32")
    End If
    Dim myTab15 As String
    '
    myTab15 = "h29:bi31"
    '
    If Not Application.Intersect(Target, Range(myTab15)) Is Nothing And Sheets("Stregone").Range("b8").Value = 3 Or Sheets("barbaro").Range("b8").Value = 3 Or Sheets("bardo").Range("b8").Value = 3 Or Sheets("chierico").Range("b8").Value = 3 Or Sheets("druido").Range("b8").Value = 3 Or Sheets("guerriero").Range("b8").Value = 3 Or Sheets("ladro").Range("b8").Value = 3 Or Sheets("mago").Range("b8").Value = 3 Or Sheets("monaco").Range("b8").Value = 3 Or Sheets("paladino").Range("b8").Value = 3 Or Sheets("ranger").Range("b8").Value = 3 Or Sheets("stregone").Range("b8").Value = 3 And Sheets("tiri nascosti").Range("h35").Value = "" Then
            Range(myTab15).Copy Destination:=Sheets("tiri nascosti").Range("h35")
    End If
    end sub