Ir ao conteúdo

Alterar número para negativo via VBA


RodMen

Posts recomendados

Postado

Pessoal,

Como eu poderia fazer para definir pelo VBA da planilha um comando que alterasse o valor de um número (de positivo para negativo). Digamos que eu tenha em A1 o número 100. Se eu digitar a palavra "Negativo" em B1, o número 100 muda para -100. Se eu deletar o texto de B1 ou digitar qualquer outra coisa, não mudará o valor. Eu preciso fazer isso para a coluna inteira, ou seja, se em qualquer linha da coluna B estiver digitado "Negativo", o número na coluna A correspondente a mesma linha terá o sinal alterado.Normalmente eu uso uma coluna auxiliar para isso, e nela coloco uma condição do tipo "SE(B1="Negativo";-A1; A1)" ou coisa parecida. Queria saber como posso fazer isso pelo código da planilha.

Desde já agradeço...

Abraço a todos!

Postado

1. copie o código abaixo

2. cique com o direito na guia da planilha na qual deseja que o código atue e escolha 'Exibir Código'

3. cole o código na janela em branco que se abrirá

4. Alt+F11 para retornar para a planilha

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Target.Column <> 2 Then Exit Sub
If Target.Offset(, -1).Value = "" Then Exit Sub
If Target.Value = "Negativo" And Target.Offset(, -1).Value > 0 Then
Target.Offset(, -1).Value = Target.Offset(, -1).Value * -1
Else: If Target.Offset(, -1).Value < 0 Then _
Target.Offset(, -1).Value = Abs(Target.Offset(, -1).Value)
End If
End Sub

Postado

Olá Osvaldo!

Obrigado pelo retorno.

O código está funcionando, mas notei o seguinte: se eu digito 100 em A1 e escrevo "Negativo" em B1 o código funciona, porém, se eu precisar alterar o valor de A1, o novo valor não ficará negativo mesmo que já esteja escrito "Negativo" em B1. Nesse caso, preciso reescrever "Negativo" em B1 para o código rodar novamente. Tem como o código rodar sempre que for alterado o valor de A1, eliminando a necessidade de redefinir B1?

Abraço.

Postado
Private Sub Worksheet_Change(ByVal Target As Range)
Dim VaA, VaB As String
If Target.Count > 1 Or Target.Column > 2 Then Exit Sub
VaA = Cells(Target.Row, 1).Value
VaB = Cells(Target.Row, 2).Value
If VaB <> "Negativo" And VaA = "" Then Exit Sub
Application.EnableEvents = False
If VaB = "Negativo" And VaA > 0 Or _
VaB <> "Negativo" And VaA < 0 Then
VaA = VaA * -1
End If
Cells(Target.Row, 1) = VaA
Application.EnableEvents = True
End Sub

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...