Nell'ipotesi descritta potresti provare questa funzione:
- Codice: Seleziona tutto
Function ScontoMultiplo(ByRef myCell As Range, Optional tTipo As Boolean = False) As Single
Dim mySplit, I As Long, CumDisc As Single
'
CumDisc = 1
mySplit = Split("0+" & Replace(Replace(myCell.Value, "%", ""), " ", ""), "+", , vbTextCompare)
For I = 1 To UBound(mySplit)
If CSng("0" & mySplit(I)) >= 1 Then
CumDisc = CumDisc * (1 - CSng(mySplit(I)) / 100)
Else
CumDisc = CumDisc * (1 - CSng("0" & mySplit(I)))
End If
Next I
If tTipo Then
ScontoMultiplo = CumDisc
Else
ScontoMultiplo = 1 - CumDisc
End If
End Function
Metti il codice in un modulo standard del tuo vba, poi avrai a disposizione la funzione ScontoMultiplo con questa sintassi
- Codice: Seleziona tutto
ScontoMultiplo(GliSconti [;TipoRestituito])
GliSconti puo' essere una stringa o il riferimento a una cella che contiene un numero o una stringa
TipoRestituito puo' essere 0 (o essere omesso) e la funzione restituisce lo Sconto, come numero decimale;
oppure puo' essere 1 e verra' restituito il complemento allo sconto, cioe' la quota prezzo residuale, come numero decimale.
Nell'immagine vedi come ho usato la funzione per calcolare il prezzo da applicare (colonna G, opzione "TipoRestituito=1") mentre in colonna F ho calcolato lo sconto applicato (opzione "TipoRestituito omesso")
La colonna F ovviamente nell'esempio potrebbe anche essere omessa, visto che il prezzo scontato lo calcolo in colonna G usando la funzione ScontoMultiplo