Condividi:        

[ExcelVba] Somma numeri

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[ExcelVba] Somma numeri

Postdi saxas » 03/12/16 12:24

Salve a tutti,
ho la necessità di sommare dei numeri con vba ma non riesco ad aggirare il problema

in pratica nelle celle delle colonne dalla A alla I righe mi ritrovo una serie di numeri tipo
4 5 5 4+2 6 7+1 8,5 5,5+2 5,5+1,5

la mia necessità è la seguente
dovrei sommare tutti i numeri senza la presenza del "+" ai soli numeri antecedenti il "+"
e sommare solo i numeri dopo il "+" (evidenziati in rosso)
nel caso sopramenzionato la prima somma dovrebbe fare 50,5 e la seconda 6,5

ho cercato di districarmi con la seguente istruzione ma inutilmente
Codice: Seleziona tutto
                 For I = 1 To Len(Numero)
                    If Mid(Numero, I, 1) = "+" Then
                        Numero= Right(Numero, I - B)
                       
                    End If

Spero di essere stato chiaro, grazie per l'aiuto
Win10 - Office 2016 Ita
saxas
Utente Junior
 
Post: 55
Iscritto il: 14/11/13 16:58

Sponsor
 

Re: [ExcelVba] Somma numeri

Postdi patel » 03/12/16 12:54

allega un file di esempio con anche il risultato desiderato
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: [ExcelVba] Somma numeri

Postdi saxas » 03/12/16 14:05

ti allego il file, fondamentalmente il foglio si presenta in questo modo
https://www.dropbox.com/s/1qxqtabvjj5b9h4/Prova.xlsx?dl=0
Win10 - Office 2016 Ita
saxas
Utente Junior
 
Post: 55
Iscritto il: 14/11/13 16:58

Re: [ExcelVba] Somma numeri

Postdi Marius44 » 03/12/16 19:49

Ciao
prova con la macro seguente
Codice: Seleziona tutto
Sub sommastrana()
For i = 1 To 13
    num = Cells(7, i).Value
    If IsNumeric(num) Then
        tot1 = tot1 + num
    ElseIf Not IsNumeric(num) Then
        nn = Split(num, "+")
        tot1 = tot1 + CDbl(nn(0))
        tot2 = tot2 + CDbl(nn(1))
    End If
Next i
Cells(15, 14) = tot1
Cells(15, 15) = tot2
End Sub

Ho volutamente scritto i risultati qualche riga più sotto.
Fai sapere. Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: [ExcelVba] Somma numeri

Postdi saxas » 03/12/16 22:03

Grazie mille,
la soluzione è perfetta, ma ho sottovalutato un problema, fra i numeri è possibile trovare delle lettere, e sostituendo uno dei numeri con una lettera mi errore in quanto non trova numeri.
E' possibile bypassare anche questo inghippo?
Win10 - Office 2016 Ita
saxas
Utente Junior
 
Post: 55
Iscritto il: 14/11/13 16:58

Re: [ExcelVba] Somma numeri

Postdi Marius44 » 04/12/16 00:22

Ciao
la macro sotto supera il problema se ci fossero lettere sia prima del segno + sia dopo
Codice: Seleziona tutto
Sub sommastrana()
For i = 1 To 13
    num = Cells(7, i).Value
    If IsNumeric(num) Then
        tot1 = tot1 + num
    ElseIf Not IsNumeric(num) Then
        nn = Split(num, "+")
        If IsNumeric(nn(0)) Then
            tot1 = tot1 + CDbl(nn(0))
        End If
        If IsNumeric(nn(1)) Then
            tot2 = tot2 + CDbl(nn(1))
        End If
    End If
Next i
Cells(15, 14) = tot1
Cells(15, 15) = tot2
End Sub


Ciao,
Mario
Marius44
Utente Senior
 
Post: 655
Iscritto il: 07/09/15 22:00

Re: [ExcelVba] Somma numeri

Postdi Anthony47 » 04/12/16 19:17

La macro di Marius certamente produce il risultato atteso; io comunque suggerirei la seguente Funzione Utente:
Codice: Seleziona tutto
Function SommaPD(ByRef myRan As Range, Optional ByVal PrDop As Long = 0) As Double
Dim Cell As Range, mySVal As String, myRes As Double, okArr
'Si richiama con =SommaPD(Intervallo;Prima/Dopo)
'   Prima/Dopo: se 0 o omesso si usano i termini prima del +
'               se 1 si usano i termini dopo il +
'
okArr = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ",")
For Each Cell In myRan
If PrDop <> 0 Then PrDop = 1
mysplit = Split(" " & Cell.Value, "+", , vbTextCompare)
    If UBound(mysplit) >= PrDop Then
        For i = 1 To Len(mysplit(PrDop))
            If Not IsError(Application.Match(Mid(mysplit(PrDop), i, 1), okArr, 0)) Then
                mySVal = mySVal & Mid(mysplit(PrDop), i, 1)
            End If
        Next i
    End If
If IsNumeric(mySVal) Then myRes = myRes + CDbl(mySVal)
mySVal = ""
Next Cell
SommaPD = myRes
End Function

Il codice va messo in un modulo standard del vba; poi da excel si potra' usare una formula tipo
Codice: Seleziona tutto
=SommaPD(C7:L7;0)
Il secondo parametro a 0, oppure se omesso, indica la somma dei termini Prima del segno +; messo a 1 allora eseguira' la somma degli eventuali termini dopo il +

Ciao!
Avatar utente
Anthony47
Moderatore
 
Post: 19223
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[ExcelVba] Somma numeri":


Chi c’è in linea

Visitano il forum: Nessuno e 64 ospiti