Valores criados utilizando a tabela de 2023.
Acrescentar estas funções (Alt + F11) a planilha:
' Aliquota de INSS
' A aliquota do INSS varia de 7.5 a 14% de acordo com o salário
Function IniciaBasesINSS()
Dim bases_aliquota_inss(2) As Double ' Iniciando um array de dois numeros fracionados
bases_aliquota_inss(0) = 1302 ' Definindo o menor valor para a base de INSS para aliquota = 9
bases_aliquota_inss(1) = 2571.29 ' Definindo o segundo valor para a base de INSS para aliquota = 12
bases_aliquota_inss(2) = 3856.94 ' Definindo o terceiro valor para a base de INSS para aliquota = 14
' o valor maximo do salário para cobrança de INSS é R$ 7507,49
' acima disso continua fixo em 14% desse valor (R$ 877,25)
IniciaBasesINSS = bases_aliquota_inss
End Function
Function CalcAliquotaINSS(salario)
bases_aliquota_inss = IniciaBasesINSS()
Select Case salario
Case 0 To bases_aliquota_inss(0)
aliquota = 7.5
Case (bases_aliquota_inss(0) + 0.01) To bases_aliquota_inss(1)
aliquota = 9
Case (bases_aliquota_inss(1) + 0.01) To bases_aliquota_inss(2)
aliquota = 12
Case Else
aliquota = 14
End Select
CalcAliquotaINSS = aliquota
End Function
Function CalcDescontoINSS(salario)
bases_aliquota_inss = IniciaBasesINSS()
Select Case salario
Case 0 To bases_aliquota_inss(0)
desconto = 0
Case (bases_aliquota_inss(0) + 0.01) To bases_aliquota_inss(1)
desconto = 19.53
Case (bases_aliquota_inss(1) + 0.01) To bases_aliquota_inss(2)
desconto = 96.67
Case Else
desconto = 173.81
End Select
CalcDescontoINSS = desconto
End Function
' INSS
' O desconto do INSS é uma porcentagem do salário, até um maximo de R$ 877,25
' e pode mudar anualmente.
Function CalcINSS(salario)
bases_aliquota_inss = IniciaBasesINSS()
aliquota = CalcAliquotaINSS(salario)
desconto = CalcDescontoINSS(salario)
CalcINSS = WorksheetFunction.Min(salario * aliquota / 100 - desconto, 877.25)
End Function
' Base do Imposto de Renda (IR)
' A base do Imposto de Renda é o salário descontado o valor do INSS.
Function CalcBaseIR(salario)
inss = CalcINSS(salario)
CalcBaseIR = salario - inss
End Function
' Aliquota do IR
' A aliquota do IR é calculada de acordo com a base do Imposto de Renda, e pode mudar anualmente.
Function IniciaBasesIR()
Dim bases_aliquota_ir(4) As Double ' Iniciando um array de quadro numeros fracionados
bases_aliquota_ir(0) = 1903.98 ' Definindo o menor valor para a base de IR para aliquota = 0
bases_aliquota_ir(1) = 2826.65 ' Definindo o segundo valor para a base de IR para aliquota = 7.5
bases_aliquota_ir(2) = 3751.05 ' Definindo o segundo valor para a base de IR para aliquota = 15
bases_aliquota_ir(3) = 4664.68 ' Definindo o segundo valor para a base de IR para aliquota = 22.5
' Acima desse ultimo valor a aliquota é 27.5
IniciaBasesIR = bases_aliquota_ir
End Function
Function CalcAliquotaIR(salario)
base_ir = CalcBaseIR(salario)
bases_aliquota = IniciaBasesIR()
Select Case base_ir
Case 0 To bases_aliquota(0)
aliquota = 0
Case (bases_aliquota(0) + 0.01) To bases_aliquota(1)
aliquota = 7.5
Case (bases_aliquota(1) + 0.01) To bases_aliquota(2)
aliquota = 15
Case (bases_aliquota(2) + 0.01) To bases_aliquota(3)
aliquota = 22.5
Case Else
aliquota = 27.5
End Select
CalcAliquotaIR = aliquota
End Function
' Imposto de Renda Sem Desconto
' O valor do imposto de renda sem desconto é feito multiplicando a base do IR pela aliquota.
Function CalcIRSemParcelaDesconto(salario)
base_ir = CalcBaseIR(salario)
aliquota = CalcAliquotaIR(salario)
CalcIRSemParcelaDesconto = (base_ir * aliquota / 100)
End Function
' Parcela de Desconto do Imposto de Renda
' Após calcular o valor do imposto de Renda
' é aplicado o desconto de uma parcela, que varia de acordo com a base do Imposto de Renda, e pode mudar anualmente.
Function IniciaParecelaDescontoIR()
Dim parcela_desconto_ir(4) As Double ' Iniciando um array de quadro numeros fracionados
parcela_desconto_ir(0) = 142.8 ' Definindo o valor para parcela de desconto de IR para aliquota = 7.5
parcela_desconto_ir(1) = 354.8 ' Definindo o valor para parcela de desconto de IR para aliquota = 15
parcela_desconto_ir(2) = 636.13 ' Definindo o valor para parcela de desconto de IR para aliquota = 22.5
parcela_desconto_ir(3) = 869.36 ' Definindo o valor para parcela de desconto de IR para aliquota = 27.5
IniciaParecelaDescontoIR = parcela_desconto_ir
End Function
Function CalcParcelaDescontoIR(salario)
base_ir = CalcBaseIR(salario)
bases_aliquota = IniciaBasesIR()
parcela_desconto_ir = IniciaParecelaDescontoIR()
Select Case base_ir
Case 0 To bases_aliquota(0)
parcela = 0
Case (bases_aliquota(0) + 0.01) To bases_aliquota(1)
parcela = parcela_desconto_ir(0)
Case (bases_aliquota(1) + 0.01) To bases_aliquota(2)
parcela = parcela_desconto_ir(1)
Case (bases_aliquota(2) + 0.01) To bases_aliquota(3)
parcela = parcela_desconto_ir(2)
Case Else
parcela = parcela_desconto_ir(3)
End Select
CalcParcelaDescontoIR = parcela
End Function
' Calculo do Imposto de Renda
' O valor final do imposto de renda é a parcela de sem desconto subtraido o valor de desconto.
Function CalcIR(salario)
parcela_sem_desconto = CalcIRSemParcelaDesconto(salario)
desconto = CalcParcelaDescontoIR(salario)
CalcIR = parcela_sem_desconto - desconto
End Function
Referências blog.luz, msdn.microsoft, Tabela INSS, Tabela IR, Arrays em VB