Formula SOMMA con variabile



  • Formula SOMMA con variabile
    di Roby73 (utente non iscritto) data: 16/03/2015 21:40:30

    Chiedo cortesemente un aiuto. Voglio creare un codice in cui inserito il numero di riga tramite il comando INPUTBOX, e conoscendo la riga corrente, si esegua la somma nell'intervallo di celle della colonna 6. Il mio scopo principale è che venga trascritto la formula e non il valore calcolato (es. =somma(F10:F12)). Di seguito trova allegato il codice che ho provato a fare, ma al momento della trascrizione della formula mi da errore.

    Grazie.
     
    Private Sub Totale_prezzi_Titolo()
            
            Dim NmrRigaAttiva, NmrRigaTitolo As Integer                                 'Definisco la variabile di tipo intero
            Dim SelezRigheDaTot As Range                                                'Definisco la variabile di tipo Range (selezione)
            ThisWorkbook.Activate                                                       'Attiva il file per controllare
            NmrRigaAttiva = ActiveCell.Row                                              ' la posizione del cursore
            NmrRigaTitolo = InputBox("Inserire il numero di riga iniaziale per fare la somma")
            Set SelezRigheDaTot = Worksheets(1).Range(Cells(NmrRigaTitolo, 6), Cells(NmrRigaAttiva - 1, 6))
            Worksheets(1).Cells(NmrRigaAttiva, 6).Formula = "=somma(" & SelezRigheDaTot & ")"
    
    End Sub
    



  • di gaetanopr data: 16/03/2015 22:43:45

    Ciao, ci sono alcuni errori
    1) le variabili di riga devono essere di tipo Long e non Integer
    2) la prima non dimensionandola è di tipo Variant
    3) se usi la proprietà formula devi scrivere la Formula in inglese "sum" altrimenti devi usare FormulLocal
    4) nella parte finale della macro devi indicare la proprietà "address" per restituire un indirizzo
     
    Option Explicit
    Private Sub Totale_prezzi_Titolo()
            
            Dim NmrRigaAttiva As Long, NmrRigaTitolo As Long                             'Definisco la variabile di tipo intero
            Dim SelezRigheDaTot As Range                                                'Definisco la variabile di tipo Range (selezione)
            'ThisWorkbook.Activate                                                       'Attiva il file per controllare
            NmrRigaAttiva = ActiveCell.Row                                              ' la posizione del cursore
            NmrRigaTitolo = InputBox("Inserire il numero di riga iniaziale per fare la somma")
            Set SelezRigheDaTot = Worksheets(1).Range(Cells(NmrRigaTitolo, 6), Cells(NmrRigaAttiva - 1, 6))
            
            Worksheets(1).Cells(NmrRigaAttiva, 6).Formula = "=sum(" & SelezRigheDaTot.Address & ")"
    
    End Sub
    



  • di Mohican1989 data: 18/03/2015 22:50:13

    Prime domande:

    1)Perché le variabili di riga devono avere valore Long e non Integer ? Non sono lo stesso tipo di dato solo che uno dei racchiude un "Range" di numeri più vasto? Se usassi la variabile di riga come Integer e la mia riga fosse la numero 100 la mia macro girerebbe ugualmente o sbaglio?
    2)Come suggerito da gaetanopr e spiegato da vecchio frac nel post "doppio" dell altra sezione, nella parte finale della macro bisogna utilizzare .address per indicare l indirizzo del Range. Mi chiedevo, questo è determinato dal fatto che sto inserendo una formula e quindi una stringa di testo e all interno non posso usare una variabile Range? Io mi aspettavo che inserendo la variabile chesso Dim Campo as Range e poi dire set campo = ("a1") potessi inserire la variabile campo al posto di inserire a1 in qualsiasi parte della mia macro. Non trovo il senso di dover indicare address se il mio Range è già un indirizzo di celle di per se.

    Grazie intanto se volete continuare a erudirmi



  • di gaetanopr data: 19/03/2015 01:26:02

    Mohican1989 cit:Perché le variabili di riga devono avere valore Long e non Integer ?
    Bisogna saper dare il giusto "valore" ai dati, una variabile che fa riferimento alle righe restituisce un valore Long e non Integer, anche se la tua riga è inferiore o uguale a 32.767, il programma continua a funzionare , ma non è raro leggere di discussioni su macro che tutto ad un tratto hanno smesso di funzionare.........magari oggi non hai la necessità di andare oltre la riga 32767 ma fra un anno chi lo sa!!!!!!

    Mohican1989 cit:Non trovo il senso di dover indicare address se il mio Range è già un indirizzo di celle di per se.
    con l'isruzione "Set SelezRigheDaTot = Worksheets(1).Range(Cells(NmrRigaTitolo, 6), Cells(NmrRigaAttiva - 1, 6))
    " assegni alla variabile SelezRigheDaTot un riferimento a un determinato oggetto(range), tramite la proprietà "address" ne restituisci l'indirizzo.
    E' buona norma a fine routine annientare l'istanza all'oggetto tramite l'istruzione
    SET SelezRigheDaTot = NOTHING


  • Formula SOMMA con variabile
    di Roby73 (utente non iscritto) data: 16/03/2015 22:02:01

    Chiedo cortesemente un aiuto. Voglio creare un codice in cui inserito il numero di riga tramite il comando INPUTBOX, e conoscendo la riga corrente, si esegua la somma nell'intervallo di celle della colonna 6. Il mio scopo principale è che venga trascritto la formula e non il valore calcolato (es. =somma(F10:F12)). Di seguito trova allegato il codice che ho provato a fare, ma al momento della trascrizione della formula mi da errore.

    Grazie.
     
    Private Sub Totale_prezzi_Titolo()
            
            Dim NmrRigaAttiva, NmrRigaTitolo As Integer                                 'Definisco la variabile di tipo intero
            Dim SelezRigheDaTot As Range                                                'Definisco la variabile di tipo Range (selezione)
            ThisWorkbook.Activate                                                       'Attiva il file per controllare
            NmrRigaAttiva = ActiveCell.Row                                              ' la posizione del cursore
            NmrRigaTitolo = InputBox("Inserire il numero di riga iniaziale per fare la somma")
            Set SelezRigheDaTot = Worksheets(1).Range(Cells(NmrRigaTitolo, 6), Cells(NmrRigaAttiva - 1, 6))
            Worksheets(1).Cells(NmrRigaAttiva, 6).Formula = "=somma(" & SelezRigheDaTot & ")"
    
    End Sub
    



  • di Zer0Kelvin data: 17/03/2015 08:58:32

    Ciao.
    Innanzitutto ricordo a tutti che "mi dà errore" non è una descrizione adeguata.
    A occhio e croce direi che, nell'istruzione somma, andrebbe inserito l'indirizzo del range:
     
    Worksheets(1).Cells(NmrRigaAttiva, 6).Formula = "=somma(" & SelezRigheDaTot.Address & ")"



  • di Mohican1989 data: 17/03/2015 20:17:57

    Sono anch io interessato visto che devo inserire una formula in una cella e la formula deve contenere variabili. Parlando da principiante alla fine delle formula dopo ")" deve essere inserito un altro " perché l ultima virgoletta contiene la parentesi ma la prima " prima dell' uguale deve essere ancora chiusa



  • di Vecchio Frac data: 17/03/2015 23:47:02

    @mohican1989
    No, la parentesi fa parte dell'espressione formula e va inserita nella stringa composta da "=somma(" + qualcosa proprio per chiudere la formula accettabile da Excel.
    La prima virgoletta doppia è correttamente chiusa dopo la prima parentesi aperta: "=somma(".

    @roby73
    Come sai è sempre bene riportare il codice di errore e la sua descrizione.
    Inoltre come fa notare Zer0Kelvin la tua variabile "SelezRigheDaTot" è un Range quindi nella stringa che calcola la somma devi riportarne l'indirizzo, come fosse una formula di Excel.






  • di gaetanopr data: 18/03/2015 00:39:56

    Salve a tutti, solo per far notare che la discussione è duplicata, anch'io ho dato una risposta nell'altra sezione.
    Facendo presente tra le altre cose l'uso della proprietà Formula con somma al posto di sum .



  • di Vecchio Frac data: 18/03/2015 09:35:12

    Hai ragione gaetanopr mi era proprio scappata

    @roby73
    Non aprire due discussioni uguali nel forum, poi si fa confusione!
    Chiudo questa perchè è stata iniziata dopo. Continuate nell'altra.