Questão Função VBA do Excel para atualizar o valor das células + = valor de célula acima


enter image description here

Como posso fazer com que, se eu inserir algo no intervalo de células B3: E3, o valor será o que eu inserir, mais o valor da célula acima.

Exemplo: Se eu inserir 20 na célula C3, uma vez que eu apertar o retorno ou clique fora, o valor será atualizado para 40.

Até agora eu sei que preciso ter algo parecido com isso:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Range("B3:E3").Value = Range("B2:E2").Value

End Sub

E eu sei que eu preciso de alguma forma acessar o valor de deslocamento, mas o VBA não é o meu forte e eu não consigo pronunciar essa pergunta corretamente.


1


origem


É esta de alguma ajuda? - LondonRob
não, porque atualiza a célula toda vez que você clica em qualquer lugar na folha - selectDistinct
Você pode tornar o intervalo do evento específico, fazendo algo como esta - LondonRob
Em vez de alterar sua pergunta, talvez seja melhor para os futuros leitores dessa pergunta se você a deixar como estava e fazer uma nova pergunta. Você pode vincular a esta pergunta para referência. (p.s. vamos esperar que as pessoas de Whitby não se importe de você compartilhar suas preferências de refrigerantes!) - LondonRob


Respostas:


Você precisará adicionar uma carga de verificação de erros para isso, mas aqui está o esqueleto:

Private Sub Worksheet_Change(ByVal Target As Range)

  ' If we're not in the range of interest
  ' do nothing.
  If Intersect(Target, Me.Range("B2:E2")) Is Nothing Then
    Exit Sub
  End If
  ' We don't want this event to fire itself!
  Application.EnableEvents = False
  ' Now add the row above (rowOffset = -1) to the value.
  Target.Value = Target.Value + Target.Offset(-1, 0).Value
  ' Don't forget to re-enable events, otherwise there'll
  ' be no more VBA events fired.
  Application.EnableEvents = True

End Sub

1



Isso funciona, mas se eu clicar em torno da planilha, a célula em questão continua a incrementar, eu quero incrementar somente se a célula em questão foi alterada - selectDistinct
Note que minha função é Worksheet_Change não Worksheet_SelectionChange - LondonRob
oops, obrigado por isso - selectDistinct
isso funciona, ele pode ser aplicado às linhas abaixo também? - selectDistinct
Basta alterar o valor do deslocamento da linha de -1 para 1 - LondonRob