Ir ao conteúdo

Excel Converter valores positivos em negativos com código VBA


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Pessoal, boa tarde.

Estou montando uma pequena planilha de controle de gastos, que contém uma tabela com 6 colunas. Como eu faria para converter valores positivos em negativos, sendo que eu não pretendo converter todos os valores da coluna, mas, somente alguns, utilizando critérios? Eu sei que preciso, talvez, utilizar uma condicional If_Then_Else, mas, confesso que já esgotei meus conhecimentos e não cheguei ao resultado pretendido. Alguém poderia me auxiliar, por favor? Obrigado.

A tabela que pretendo converter os valores, são apenas as Despesas e os Invest. As receitas continuarão com valores positivos.

 

Captura de tela 2022-05-15 141045.png

Postado

Acredito que o código abaixo resolva.

PS: Fiz somente para despesas

 

Private Sub Worksheet_change(ByVal Target As Range)
            
    
        If Target.Column = 5 And Target.Value <> "" And Cells(Target.Row, 3) = "DESPESA" Then 'PROCV DE CLIENTE
        
        Application.EnableEvents = False
                          
        Cells(Target.Row, 5).Value = Target.Value * (-1)
        
        End If
        
End Sub
        

 

  • Curtir 2
Postado

Bom dia Diego, gostaria de agradecê-lo pela ajuda, mas infelizmente, por algum motivo o código não funcionou.

A propósito "Worksheet_change", deveria funcionar quando ocorrer a mudança de planilha, certo? Então, eu tentei fazer o código na planilha e, também, no módulo, mas não funcionou.

Postado

Boa tarde Midori, estou desenvolvendo isso em VBA, assim, esse seu exemplo funcionaria bem na planilha do Excel, mas como eu transformaria isso em código VBA?

Obrigado.

Eu descobri um código que só falta aperfeiçoar, porque ele apresentou dois pequenos problemas:

1) Ele converte todas as linhas de positivo para negativo, porém, quando rodo ele novamente faz ao contrário, converte todas as linhas de negativo para positivo;

2) Eu preciso criar uma condição para que somente as linhas de Despesa e Invest tenham os valores convertidos.

Segue o código.

 

Private Sub NegativosPositivo()
Dim ce As Range
For Each ce In Range("E2:E" & Cells(Rows.Count, "E").End(xlUp).Row)
    ce.Value = -ce.Value
Next ce
End Sub

Mais uma vez obrigado.

  • Solução
Postado

@CARLOS A R SOUZA O código deve ter o critério que testa se a Categoria é Despesa ou Invest. E para resolver a questão de inverter o valor a cada execução, antes você pode verificar se o valor é positivo, p.ex,

 

Sub Converte()
    Dim Categoria   As Range
    Dim Valor       As Range
    
    Set Categoria = [C2]
    
    While Categoria <> ""
        Set Valor = Categoria.Offset(0, 2)
        If Categoria = "Despesa" Or Categoria = "Invest" Then
            If Valor > 0 Then
                Valor = -Valor
            End If
        End If
        Set Categoria = Categoria.Offset(1)
    Wend
End Sub

 

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...