Questa è una funzione personalizzata (definita dall'utente) che calcola la detrazione ex art. 13, comma 1bis, del tuir:
'---
Function Detrazione_Art_13_C_1bis(Reddito_Complessivo As Currency, _
Giorni_Lavoro As Integer, _
Irpef_Lorda As Currency, _
Detrazione_Lavoro As Currency) As Currency
Dim Risultato As Currency, Ratio As Double
Const LimiteReddito1 As Currency = 24000
Const LimiteReddito2 As Currency = 26000
Const DetrazioneBase As Currency = 960
Const DivisoreRatio As Currency = 2000
If Irpef_Lorda > Detrazione_Lavoro Then
If Reddito_Complessivo <= LimiteReddito1 Then
Risultato = DetrazioneBase
ElseIf Reddito_Complessivo > LimiteReddito1 And Reddito_Complessivo <= LimiteReddito2 Then
Ratio = CDbl(Left(CDec(((LimiteReddito2 - Reddito_Complessivo) / DivisoreRatio)), 6))
Risultato = DetrazioneBase * Ratio
Else
Risultato = 0
End If
Else
Risultato = 0
End If
Detrazione_Art_13_C_1bis = Application.Round(Risultato * Giorni_Lavoro / 365, 0)
End Function
'---
La funzione richiede che siano calcolate anche l'irpef lorda e le detrazioni per lavoro.
Per calcolarle puoi utilizzare queste funzioni personalizzate da "annidare" nella funzione stessa (o facendo in modo che le funzioni siano inserite in una cella e quella della detrazione "Renzi" faccia riferimento alle celle):
'----
Function Calcolo_Irpef(Reddito_Imponibile As Currency) As Currency
Dim Sc As Variant
Dim al As Variant
Dim Irpef_Sc As Variant
Dim i As Integer
If Reddito_Imponibile <= 0 Then
Calcolo_Irpef = 0
Exit Function
End If
Sc = Array(0, 15000, 28000, 55000, 75000)
al = Array(0.23, 0.27, 0.38, 0.41, 0.43)
Irpef_Sc = Array(0, 3450, 6960, 17220, 25420)
i = -1
Do
i = 1 + i
If i > UBound(Sc) Then Exit Do
Loop Until Application.Round(Reddito_Imponibile, 0) <= Sc(i)
Calcolo_Irpef = Application.Round(((Reddito_Imponibile - Sc(i - 1)) * al(i - 1)) + Irpef_Sc(i - 1), 0)
End Function
Function Detrazioni_Lavoro_Dipendente(Reddito_Complessivo As Currency, _
Giorni_Lavoro As Integer, _
Optional Opz_Lav_Tempo_Det As Boolean) As Currency
Dim Reddito1 As Currency, Detrazione1 As Currency, DetrazioneMinima As Currency, _
Reddito2 As Currency, Detrazione2 As Currency, MaggiorazioneDetrazione2 As Currency, _
Divisore1 As Currency, Ratio1 As Double, Reddito3 As Currency, Divisore2 As Currency, _
Ratio2 As Double, RisultatoDetrazione As Currency
If Opz_Lav_Tempo_Det = True Then
DetrazioneMinima = 1380
Else
DetrazioneMinima = 690
End If
Reddito1 = 8000
Detrazione1 = 1880
Reddito2 = 28000
Detrazione2 = 978
MaggiorazioneDetrazione2 = 902
Divisore1 = 20000
Reddito3 = 55000
Divisore2 = 27000
Ratio1 = CDbl(Left(CDec(((Reddito2 - Reddito_Complessivo) / Divisore1)), 6))
Ratio2 = CDbl(Left(CDec(((Reddito3 - Reddito_Complessivo) / Divisore2)), 6))
If Reddito_Complessivo <= 0 Or Reddito_Complessivo > Reddito3 Then
Detrazioni_Lavoro_Dipendente = 0
Exit Function
End If
If Reddito_Complessivo <= Reddito1 Then
If Detrazione1 * Giorni_Lavoro / 365 <= DetrazioneMinima Then
RisultatoDetrazione = DetrazioneMinima
Else
RisultatoDetrazione = Detrazione1 * Giorni_Lavoro / 365
End If
End If
If Reddito_Complessivo > Reddito1 And Reddito_Complessivo <= Reddito2 Then
RisultatoDetrazione = (Detrazione2 + (MaggiorazioneDetrazione2 * Ratio1)) * Giorni_Lavoro / 365
End If
If Reddito_Complessivo > Reddito2 And Reddito_Complessivo <= Reddito3 Then
RisultatoDetrazione = Detrazione2 * Ratio2 * Giorni_Lavoro / 365
End If
Detrazioni_Lavoro_Dipendente = Application.Round(RisultatoDetrazione, 0)
End Function
'----