Skip to content

Instantly share code, notes, and snippets.

@aalvesjr
Last active February 2, 2023 02:58
Show Gist options
  • Save aalvesjr/c92906d0bfacc7c11bad to your computer and use it in GitHub Desktop.
Save aalvesjr/c92906d0bfacc7c11bad to your computer and use it in GitHub Desktop.
[Excel] Funções para calcular valor e aliquota de INSS e Imposto de Renda (IR) no Excel com Visual Basic

Valores criados utilizando a tabela de 2016, caso esses valores sejam alterados, mudar as funcções:

  • IniciaBasesINSS()
  • IniciaBasesIR()
  • IniciaParecelaDescontoIR()

Presumindo que as aliquotas de INSS sejam sempre 8, 9 e 11 e as de IR sejam 7.5 , 15, 22.5 e 27.5 , caso estas aliquotas mudem outros pontos no código devem ser alterados

Acrescentar estas funções (Alt + F11) a planilha:

' Aliquota de INSS
' A aliquota do INSS varia de 8 a 11% 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) = 1556.94     ' Definindo o menor valor para a base de INSS para aliquota = 8
    bases_aliquota_inss(1) = 2594.92     ' Definindo o segundo valor para a base de INSS para aliquota = 9
    bases_aliquota_inss(2) = 5189.82     ' acima desse ultimo valor a aliquota é 11%
                                         ' o valor maximo do salário para cobrança de INSS é R$ 5.189,82
                                         ' acima disso continua fixo em 11% desse valor (R$ 570,88)
    IniciaBasesINSS = bases_aliquota_inss
End Function

Function CalcAliquotaINSS(salario)
    bases_aliquota_inss = IniciaBasesINSS()

    Select Case salario
        Case 0 To bases_aliquota_inss(0)
            aliquota = 8
        Case (bases_aliquota_inss(0) + 0.01) To bases_aliquota_inss(1)
            aliquota = 9
        Case Else
            aliquota = 11
    End Select
    
    CalcAliquotaINSS = aliquota
End Function

' INSS
' O desconto do INSS é uma porcentagem do salário, até um maximo de R$ 570,88
' e pode mudar anualmente.
Function CalcINSS(salario)
    aliquota = CalcAliquotaINSS(salario)
    bases_aliquota_inss = IniciaBasesINSS()

    CalcINSS = salario * aliquota / 100
    
    If (salario > bases_aliquota_inss(2)) Then             ' se o salario for maior que o limite definido como base da aliquota de INSS
        CalcINSS = bases_aliquota_inss(2) * aliquota / 100 ' define o INSS como o valor maximo estipulado para o ano
    End If
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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment