Selezione Area per somma



  • Selezione Area per somma
    di Roby73 (utente non iscritto) data: 22/03/2015 21:57:28

    Devo fare un codice VBA, che quando premo il pulsante totali, faccia il calcolo del totale di tutte le righe precedenti. Nella colonna posizione ci sono dei codici: solo numerici sono gli articoli da sommare; codice numerico con nel mezzo la lettera “t” sono i titoli; codice numerico con nel mezzo la lettera “T” sono i totali. Una nota importante la cella del totale deve contenere la formula e non il valore numerico calcolato. L’ideale sarebbe quello di fare una Area e togliere solamente le righe con il codice numerico contenente le T maiuscole. Oppure come nel codice allegato ho fatto più aree e le ho unite senza però ottenere il risultato voluto. Vorrei allegare anche il file, ma non so come si fa in questa discussione.
     
    Private Sub Totali_Click()
    
            Dim NmrRigaAttiva As Long, NmrRigaTotInz As Long, NmrRigaTotFin As Long     'Attribuisco il tipo di variabile a intero lungo
            Dim SelezRigheDaTot As Range, SelezRigheDaTotProvv As Range                 'Definisco la variabile di tipo Range (selezione)
            Dim DscRiga As String                                                       'Attribuisco il tipo di variabile a stringa
            ThisWorkbook.Activate                                                       'Attiva il file per controllare
            NmrRigaAttiva = ActiveCell.Row                                              ' la posizione del cursore
            Set SelezRigheDaTot = Nothing                                               'Azzera la variabile Range
            Set SelezRigheDaTotProvv = Nothing                                          'Azzera la variabile Range
            NmrRigaTotInz = 7                                                           'Assegno il valore della riga iniziale
            For NmrRigaTotFin = 7 To NmrRigaAttiva                                      'Esegue un ciclo for per cercare a quale riga corrisponde il titolo
                DscRiga = Worksheets(1).Cells(NmrRigaTotFin, 1)                         'Legge il contenuto della cella attiva
                If DscRiga Like "*T*" Then
                   Set SelezRigheDaTotProvv = Worksheets(1).Range(Cells(NmrRigaTotInz, 6), _
                                              Cells(NmrRigaTotFin - 1, 6))              'Imposta la selezione delle celle dal riga del titolo fino alla riga attiva
                   NmrRigaTitInz = NmrRigaTitFin + 1
                   NmrRigaTitFin = NmrRigaTitFin + 1
                End If
                If SelezRigheDaTot Is Nothing Then
                   If Not SelezRigheDaTotProvv Is Nothing Then
                      Set SelezRigheDaTot = SelezRigheDaTotProvv
                   End If
                ElseIf Not SelezRigheDaTotProvv Is Nothing Then
                       Set SelezRigheDaTot = Union(SelezRigheDaTotProvv, SelezRigheDaTot)
                End If
            Next NmrRigaTotFin
            Set SelezRigheDaTot = Worksheets(1).Range(Cells(NmrRigaTotInz, 6), _
                                                      Cells(NmrRigaTotFin - 2, 6))      'Imposta la selezione delle celle dal riga del titolo fino alla riga attiva
            If Not SelezRigheDaTotProvv Is Nothing Then
               If Not SelezRigheDaTot Is Nothing Then Set SelezRigheDaTot = Union(SelezRigheDaTotProvv, SelezRigheDaTot)
            End If
            Worksheets(1).Cells(NmrRigaAttiva, 6).FormulaLocal = _
                                       "=somma(" & SelezRigheDaTot.Address & ")"        'Trascrive la formula delle celle selezionate precedentemente
    
    
    End Sub
    



  • di Vecchio Frac data: 23/03/2015 09:01:40

    Zippa il file e premi "Allega un file" in alto a destra in questa discussione.





  • di Roby73 (utente non iscritto) data: 23/03/2015 13:18:54

    Ho allegato il file



  • di Mister_x (utente non iscritto) data: 23/03/2015 15:30:35

    ciao

    se la struttura e' sempre questa proposta si puo' abbazzare una sub() di questo tipo
    bruttina ma funzionante

    ciao
     
    Sub sommaTot()
    Dim Nrigsom As Long
    Dim TotSomma As Double
    Nrigsom = ActiveCell.Row
    Dim nnn As String
    For i = 1 To Nrigsom - 1
      If IsNumeric(Cells(i, "F")) And IsNumeric(Cells(i + 1, "F")) Then
      TotSomma = TotSomma + Cells(i, "F")
      End If
    Next i
    Cells(Nrigsom, "F") = TotSomma
    End Sub
    






  • di scossa data: 23/03/2015 15:57:41

    Forse non ho capito la tua esigenza, ma non basterebbe in F26 (o dove vuoi il Totale Appartamento) mettere questa formula:

    =MATR.SOMMA.PRODOTTO(SE.ERRORE(--NON(VAL.NUMERO($A$7:$A$25))*$F$7:$F$25;0))



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)



  • di scossa data: 23/03/2015 15:59:32

    Dimenticavo: matriciale da confermare con ctrl+maiusc+invio



    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno.
    Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)