Executar macro em coluna (soma e subtração)


#1

Tenho uma planilha onde preciso executar uma soma e subtração repetitivas que ao inserir o valor na coluna D é somado o resultado na coluna I e uma onde ao inserir o valor na coluna E é subtraído o resultado na coluna J.
Porém como o código abaixo só consigo executar se informar exatamente a linha em que será executada o que faria com que tivesse de copiar o código para cada linha que fosse calculado.
Sei que existe uma forma de informá-lo que quero que execute em toda a coluna entendendo qual linha está selecionada, mas não achei uma solução ideal.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range("d4").Address Then

Sheets("Planilha1").Cells(4, "I") = Sheets("Planilha1").Cells(4, "D") + Sheets("Planilha1").Cells(4, "I")

Sheets("Planilha1").Cells(4, 4).ClearContents

Sheets("Planilha1").Cells(4, 4).Select

End If

If Target.Address = Range("e4").Address Then

Sheets("Planilha1").Cells(4, "J") = Sheets("Planilha1").Cells(4, "E") - Sheets("Planilha1").Cells(4, "J")

Sheets("Planilha1").Cells(4, 5).ClearContents

Sheets("Planilha1").Cells(4, 5).Select

End If

End Sub

#2

Pq não tenta assim:

Ao invés de:
If Target.Address = Range(“d4”).Address Then

tente:
if Target.Column = 4 And Target.Row >= 4 And Target.Row <= 100 Then

Considerações:
target.column = 4 (Coluna D)
target.row >= 4 (primeira linha considerada Linha"4")
target.row <= 100 (ultima linha considerada que pode ser mudada para qualquer outro valor, dependendo da sua necessidade)

Ou seja, está considerando a coluna D, da linha 4 até a 100…

Abrç


#3

Não deu certo.
O que aconteceu é que agora ao digitar um valor em outra linha ele joga a seleção para a linha 4.


#4

Bem, nesse caso você poderia postar sua planilha para eu dar uma olhada nela?


#5

Tentei te enviar por aqui mas sou novo usuário. Não tenho permissão. Posso enviar por e-mail?


#6

Enviei uma mensagem com e-mail para você me encaminhar o anexo.

Abrç!


#7

@TiagoRamos me desculpe pela demora…

Na correria aqui acabei me esquecendo de enviar…

Espero que seja isso o que está querendo.

Abrç! substitui o seu código por esse:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count > 1 Or IsEmpty(Target) Then
Exit Sub
End If
 
If Target.Column = 4 And Target.Row >= 4 And Target.Row <= 100 Then

Target.Offset(0, 5).Value = Target.Value + Target.Offset(0, 5).Value 'nesse caso, ao invés de activecell.offset usa-se target.offset
Target.Value = ""

End If

If Target.Column = 5 And Target.Row >= 4 And Target.Row <= 100 Then

Target.Offset(0, 5).Value = -Target.Value + Target.Offset(0, 5).Value 'nesse caso, ao invés de activecell.offset usa-se target.offset
Target.Value = ""
End If

End Sub

CONTROLE ESTOQUE - MACRO.xlsm (21,8 KB)


#8

Perfeito amigo.
Exatamente o que precisava.
Vou estudar as modificações que fez.
Muito obrigado.


#9

Por nada. Precisando, estamos aí!