Originariamente inviato da NonCeLaFaccio+
L'ho fatta un po' in velocità ma dovrebbe funzionare
codice:
Public Function sottrai_numeri(casella)
Dim filler, caratteri(), i, carattere, addendo(), segno, i_max
filler = "+"
ReDim Preserve caratteri(0)
caratteri(0) = filler
For i = 1 To Len(casella)
ReDim Preserve caratteri(i)
carattere = Mid(casella, i, 1)
If (carattere >= 0) And (carattere <= 9) Then
caratteri(i) = carattere
filler = "-"
Else
caratteri(i) = filler
End If
Next
i = 0
ReDim Preserve addendo(i)
segno = 1
For Each carattere In caratteri
If IsNumeric(carattere) Then
addendo(i) = (addendo(i) * 10) + (segno * carattere)
Else
i = i + 1
ReDim Preserve addendo(i)
If carattere = "-" Then
segno = -1
End If
End If
Next
i_max = i
sottrai_numeri = 0
For i = 0 To i_max
sottrai_numeri = sottrai_numeri + addendo(i)
Next
End Function
Devi creare un foglio excel xlsx, salvarlo come xlsm (con attivazione di macro), digitare ALT+F11, cliccare due volte su "Modulo1" nella finestrella dei progetti e poi incollare il codice nell'area bianca.
Se modulo1 non è presente clicca col destro su VBAProject e inserisci un nuovo modulo.
Se già ci sono altri moduli può darsi che tu debba inserirla nell'ultimo o in uno intermedio, fai un po' di prove.
Fatto questo la richiami da una qualsiasi cella come se fosse una normale funzione:
codice:
=sottrai_numeri(A1)
La function riceve la casella da esaminare, fa un primo ciclo in cui trasforma la stringa in array riportando i caratteri numerici e sostituendo gli altri con + se si trovano prima del primo numerico e con - se si trovano dopo.
Poi esamina l'array ricostruendo i numeri a partire dalla sequenza di cifre ed assegnando il segno + al primo e il - agli altri e riporta i numeri così ottenuti nell'array addendi.
E infine somma gli addendi.
Funziona anche con più numeri con la regola che sottrae dal primo tutti quelli che seguono.
Fai sapere come va.
Ciao