Pessoal,
Estou bolando uma planilha de controle de combustível / Km rodados… Quando um motorista abastece o veículo dentro da empresa (há uma bomba própria), ele informa o KM (atual), do veículo.
Dentro da planilha esse é o dado que será inserido e preciso calcular o hodômetro a partir daí…
Na planilha tenho vários dados mas o que importa são:
Coluna A: Data
Coluna B: Placa
Coluna C: KM Atual
Coluna D: KM Antigo
Coluna E: Hodômetro
Gostaria que o usuário, ao inserir uma placa já informada em data diferente, obtivesse a informação do último registro daquela placa referente ao KM atual, na linha que ele estiver preenchendo, mas na coluna KM antigo…
Se ele já tem um dado na linha 02, por exemplo 01/06/2020 - ABC123 - 120.200
Na linha 20 ao inserir a informação: 03/06/2020 - ABC123 - 120.300 (na célula D20, aparecer a informação do que está em C2: 120.200).
Anexo encontra-se planilha com os campos informados.
Alguém consegue me auxiliar?
Vídeo recomendado
https://youtu.be/diWPPPhW-9E
https://youtu.be/diWPPPhW-9E
Dúvida Excel - Planilha Controle de Combustível e Kilometragem
Moderador: joseA
-
- Acabou de chegar
- Mensagens: 1
- Registrado em: Qua Mai 27, 2020 2:45 pm
Dúvida Excel - Planilha Controle de Combustível e Kilometragem
- Anexos
-
- PLANILHA - FORUM TOMAS VASQUES.zip
- (11.23 KiB) Baixado 292 vezes
Re: Dúvida Excel - Planilha Controle de Combustível e Kilometragem
Boa tarde!cemilani_spo escreveu: ↑Qua Mai 27, 2020 4:51 pm Pessoal,
Estou bolando uma planilha de controle de combustível / Km rodados… Quando um motorista abastece o veículo dentro da empresa (há uma bomba própria), ele informa o KM (atual), do veículo.
Dentro da planilha esse é o dado que será inserido e preciso calcular o hodômetro a partir daí…
Na planilha tenho vários dados mas o que importa são:
Coluna A: Data
Coluna B: Placa
Coluna C: KM Atual
Coluna D: KM Antigo
Coluna E: Hodômetro
Gostaria que o usuário, ao inserir uma placa já informada em data diferente, obtivesse a informação do último registro daquela placa referente ao KM atual, na linha que ele estiver preenchendo, mas na coluna KM antigo…
Se ele já tem um dado na linha 02, por exemplo 01/06/2020 - ABC123 - 120.200
Na linha 20 ao inserir a informação: 03/06/2020 - ABC123 - 120.300 (na célula D20, aparecer a informação do que está em C2: 120.200).
Anexo encontra-se planilha com os campos informados.
Alguém consegue me auxiliar?
Fiz a criação de um código VBA que faz o procedimento que você deseja. Favor fazer alguns testes, o código irá pegar as informações mais recentes.
O código pode ser verificado ao pressionar ALT+F11 > Lado esquerdo superior > Microsoft Excel Objetos > EstaPasta_de_Trabalho
Código: Selecionar todos
Option Explicit
' vgProcessamentoAtivo = Usado para identificar se ja está em andamento uma validação.
Dim vgProcessamentoAtivo As Boolean
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
' vQTDLinhas = Guarda quantidade de linhas.
' vLoop = Usado para estrutura de repetição.
Dim vQTDLinhas As Long
Dim vLoop As Long
' Caso tenha um processamento ativo, não permite outro processamento até que o primeiro acabe.
If vgProcessamentoAtivo = False Then
vgProcessamentoAtivo = True
' Verifica se a linha alterada é referente à coluna B e se possui 8 caracteres "XXX-0000".
If Target.Column = 2 And Len(Target.Value2) = 8 Then
' Valida quantidade de linhas existentes.
vQTDLinhas = Sheets("Abastecimento").Range("A" & Rows.Count).End(xlUp).Row
' Varre todas as células da coluna B (da ultima linha para a primeira, para garantir informações mais recentes (data em ordem crescente)).
For vLoop = vQTDLinhas To 1 Step -1
' Se for a célula que acabou de sofrer alteração, ignora.
If Cells(vLoop, 2).AddressLocal <> Target.AddressLocal Then
' Se encontrar uma célula com a mesma placa..
If Cells(vLoop, 2).Value2 = Target.Value2 Then
' Verifica se possui preenchimento na coluna C.
If IsNull(Cells(vLoop, 3).Value2) = False And Cells(vLoop, 3).Value2 <> "" Then
' Preenche valor na coluna C.
Cells(Target.Row, Target.Column + 1).Value2 = Cells(vLoop, 3).Value2
End If
' Verifica se possui preenchimento na coluna D.
If IsNull(Cells(vLoop, 4).Value2) = False And Cells(vLoop, 4).Value2 <> "" Then
' Preenche valor na coluna D.
Cells(Target.Row, Target.Column + 2).Value2 = Cells(vLoop, 4).Value2
End If
' Caso tenha valor nas colunas C e D, sai da estrutura de repetição, pois foi feito o preenchimento.
If IsNull(Cells(vLoop, 3).Value2) = False And Cells(vLoop, 3).Value2 <> "" And _
IsNull(Cells(vLoop, 4).Value2) = False And Cells(vLoop, 4).Value2 <> "" Then
Exit For
End If
End If
End If
Next
' Define processamento como falso (finalizado).
vgProcessamentoAtivo = False
End If
End If
End Sub
- Anexos
-
- PLANILHA - AproveitamentoDados.zip
- (20.4 KiB) Baixado 261 vezes