Skip to content

Instantly share code, notes, and snippets.

@jmbenedetto
Forked from aalvesjr/utilities.md
Last active February 2, 2023 03:03
Show Gist options
  • Save jmbenedetto/0b4e1935e9f8f32fed605e85946be31f to your computer and use it in GitHub Desktop.
Save jmbenedetto/0b4e1935e9f8f32fed605e85946be31f 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 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

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