Página 1 de 1

Comparar valores

Enviado: 25 Dez 2018 às 16:10
por ppveiga
Preciso comparar cinco valores e a diferença entre eles não pode ser maior que 0,4, no caso são as células que estão pintadas em amarelo conforme planilha em anexo, se for maior, preciso que seja exibida uma msgbox.
Ex:- compara-se os valores entre N12 a S12, os valores entre N21 a S21, etc, então nessa planilha tem seis opções de comparações.

Outra situação, a soma das células que estão em azul não pode ser superior a 60,00 minutos, só que posso utilizar somente a primeira célula da atividade 1 onde uma atividade pode conter 60 minutos minutos, ou utilizar mais de uma atividade que somando todas elas não pode ultrapassar os 60 minutos.

Obrigado

Re: Comparar valores

Enviado: 25 Dez 2018 às 21:47
por osvaldomp
Código: Selecionar todos
=SE((MÁXIMO(N12:S15)-MÍN(N12:S15))>0,4;"maior do que 0,4";"")
obs.
1. se a fórmula retornar #NOME substitua MÍN por MÍNIMO
2. sugestão: não mescle células, pois células mescladas são inúteis, desnecessárias e podem provocar erros em fórmulas e em macros

Comparar valores

Enviado: 26 Dez 2018 às 20:11
por ppveiga
Amigão, obrigado pela resposta e pela dica quanto a mesclar células, porém minha ideia é fazer com macro mas não estou conseguindo!

Re: Comparar valores

Enviado: 26 Dez 2018 às 21:35
por osvaldomp
ppveiga escreveu:... minha ideia é fazer com macro ...
Informe com exatidão:
1. como você pretende disparar a macro
2. em que momento você pretende disparar a macro
3. se a macro verificará todos os intervalos (N12:S12, N21:S21, ... ) ou apenas um intervalo selecionado/escolhido
4. se o único exemplo em N12:S12 representa todas as variações de dados possíveis de ocorrer, se não, então coloque exemplos que representem todas as variações
5. o resultado esperado para cada exemplo e as explicações de como foi obtido
6. onde e como você deseja que a macro forneça o resultado para cada exemplo

Comparar valores

Enviado: 27 Dez 2018 às 19:41
por ppveiga
Seguem as respostas das perguntas:
1. como você pretende disparar a macro
Se possível automaticamente, assim que preencher a 5ª leitura, dai o sistema compara entre os cinco valores. Ex:- assim que preencher o último valor na célula S12, dai compara-se entre os cinco valores entre N12, O12, P12, Q12, S12.

2. em que momento você pretende disparar a macro
Assim que preencher a 5ª leitura, como neste exemplo S12.

3. se a macro verificará todos os intervalos (N12:S12, N21:S21, ... ) ou apenas um intervalo selecionado/escolhido
São verificações separadas, ou seja, deve-se fazer a comparação entre cinco valores conforme segue:
N12, O12, P12, Q12, S12
N21, O21, P21, Q21, S21
N30, O30, P30, Q30, S30
N39, O39, P39, Q39, S39
N49, O49, P49, Q49, S49
N58, O58, P58, Q58, S58

4. se o único exemplo em N12:S12 representa todas as variações de dados possíveis de ocorrer, se não, então coloque exemplos que representem todas as variações
Conforme descrito no item anterior

5. o resultado esperado para cada exemplo e as explicações de como foi obtido
O resultado esperado é que não haja variação entre os cinco valores maior do que 0,4, os valores são obtidos em avaliações de calor com termômetro para cálculo do IBUTG e são inseridos manualmente na planilha.

6. onde e como você deseja que a macro forneça o resultado para cada exemplo
Na verdade só preciso que exiba uma caixa de mensagem se a variação entre os valores for maior do que 0,4, isso é uma segurança para que não tenhamos dados errados na planilha.

PS:- se a macro não funcionar com células mescladas, vou ter que refazer a planilha.

Obrigado pelo interesse em me ajudar.

Re: Comparar valores

Enviado: 28 Dez 2018 às 21:15
por osvaldomp
Veja se atende.
Cole o código abaixo no módulo da planilha de interesse.

Funcionamento: o código irá rodar após o preenchimento manual, em qualquer ordem, de qualquer dos intervalos amarelos, ex. N12:S12, e irá rodar também se o intervalo já estiver preenchido e for alterado algum valor.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim dMax As Double, dMin As Double
 If Target.Column < 14 Or Target.Column > 19 Or _
  Cells(Target.Row, 13) <> "IBUTG" Or Application.CountA(Cells(Target.Row, 14).Resize(, 6)) < 5 Then Exit Sub
  dMax = Evaluate("Max(" & Cells(Target.Row, 14).Resize(, 6).Address & ")")
  dMin = Evaluate("Min(" & Cells(Target.Row, 14).Resize(, 6).Address & ")")
  If dMax - dMin > 0.4 Then MsgBox "A MAIOR DIFERENÇA ENTRE OS VALORES É DE " & dMax - dMin
End Sub

Comparar valores

Enviado: 31 Dez 2018 às 10:20
por ppveiga
Rapaz, funcionou mesmo, parabéns e obrigado pela ajuda, jamais conseguiria fazer uma programação neste nível.
Aproveitando do seu conhecimento diferenciado, queria colocar três situações para ver se há como resolver:
1) como já disse, o programa rodou direitinho, porém se observar na linha que vai de N49 a S49, no exemplo da planilha em anexo a diferença é de 0,7, porém está exibindo 0,69999999999, já tentei ver formatação das células mas parece que está tudo certo.
2) Após exibir a mensagem de erro e a caixa de mensagem for fechada e vc não corrigir o erro, o sistema irá salvar a planilha mesmo assim, teria como checar esse programa antes de salvar, pode ser que a pessoa feche a caixa de mensagem e não corrija a diferença.
3) Como pode ver, acrescentei a palavra atenção no texto exibido pela caixa de mensagem, tem como colocar a palavra atenção sobre a mensagem, desta forma:
ATENÇÃO!
A maior diferença entre os valores é de.....
PS: se for algo muito complicado, sem problemas, da forma como está já é algo bem diferenciado!

Agora, estou com uma outra situação parecida nesta mesma planilha e queria ver se tem como fazer por programação também, vou responder em forma de pergunta como foi feito para o item anterior: Nas células AA12, AA21, AA30, AA39, AA49, AA58, entra-se com valores de horas, das quais todas elas somadas, não pode ultrapassar 60 minutos, porém pode ser que tenha apenas uma atividade com 60 minutos ou no máximo seis atividades que somadas não podem ultrapassar 60 minutos.

Seguem as respostas das perguntas:
1. como você pretende disparar a macro
Automaticamente ao fazer a leitura das células AA12, AA21, AA30, AA39, AA49, AA58.

2. em que momento você pretende disparar a macro
Assim que preencher qq uma das células citadas no item 1.

3. o resultado esperado
O resultado esperado é que o valor de uma célula ou a soma de duas células ou mais, não seja superior a 60 minutos.

6. onde e como você deseja que a macro forneça o resultado para cada exemplo
Na verdade só preciso que exiba uma caixa de mensagem se for maior que 60 minutos.

Mais uma vez muito obrigado.

Deus abençoe

Re: Comparar valores

Enviado: 01 Jan 2019 às 21:09
por osvaldomp
ppveiga escreveu: 1) ... vai de N49 a S49, no exemplo da planilha em anexo a diferença é de 0,7, porém está exibindo 0,69999999999, ...
Na minha máquina a diferença calculada é de 0,6 e a mensagem exibe 0,600000000000001. :?: Alterei no código abaixo para exibir no formato 0,0
2) Após exibir a mensagem de erro e a caixa de mensagem for fechada e vc não corrigir o erro, o sistema irá salvar a planilha mesmo assim, teria como checar esse programa antes de salvar, pode ser que a pessoa feche a caixa de mensagem e não corrija a diferença.
Duas possibilidades pra você escolher:
a) se a diferença for maior do que 0,6 o código apagará a última entrada, ou
b) ao comando de Salvar do usuário um outro código verificará todos os intervalos (da Atividade 1 até a 6)

3) Como pode ver, acrescentei a palavra atenção no texto exibido pela caixa de mensagem, tem como colocar a palavra atenção ...
Acrescentei o comando no código abaixo
Agora, estou com uma outra situação parecida...
Acrescentei no código abaixo. Formate as células mescladas :twisted: das colunas AA:AB como 13:30
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim dMax As Double, dMin As Double, h
  If Target.Column = 27 Then
   h = Format(Application.Sum(Range("AA12:AB65")), "hh:mm")
  If TimeValue(h) > TimeValue("1:00") Then MsgBox "A soma dos tempos das atividades é de " _
    & Hour(h) & "h" & Format(Minute(h), "00"), vbInformation, "A T E N Ç Ã O"
  End If
  
  If Target.Column < 14 Or Target.Column > 19 Or _
   Cells(Target.Row, 13) <> "IBUTG" Or Application.CountA(Cells(Target.Row, 14).Resize(, 6)) < 5 Then Exit Sub
   dMax = Evaluate("Max(" & Cells(Target.Row, 14).Resize(, 6).Address & ")")
   dMin = Evaluate("Min(" & Cells(Target.Row, 14).Resize(, 6).Address & ")")
   If dMax - dMin > 0.4 Then MsgBox "A maior diferença entre as leituras é de " _
    & Format(dMax - dMin, "0.0"), vbInformation, "A T E N Ç Ã O"
  End Sub

Comparar valores

Enviado: 06 Jan 2019 às 18:54
por ppveiga
Obrigado pelo retorno, desculpe a demora mas estava enrolado com TCC... :evil:
2) Após exibir a mensagem de erro e a caixa de mensagem for fechada e vc não corrigir o erro, o sistema irá salvar a planilha mesmo assim, teria como checar esse programa antes de salvar, pode ser que a pessoa feche a caixa de mensagem e não corrija a diferença.
Duas possibilidades pra você escolher:
a) se a diferença for maior do que 0,6 o código apagará a última entrada, ou
b) ao comando de Salvar do usuário um outro código verificará todos os intervalos (da Atividade 1 até a 6)
Se for possível prefiro o item b.
Agora, estou com uma outra situação parecida...
Acrescentei no código abaixo. Formate as células mescladas :twisted: das colunas AA:AB como 13:30
já alterei, porém não está dando certo, nem com esta formatação, nem com formatação de números.

Mais uma vez obrigado pela dedicação!

Re: Comparar valores

Enviado: 07 Jan 2019 às 12:58
por osvaldomp
ppveiga escreveu:Se for possível prefiro o item b.
Instale o código abaixo no módulo de EstaPasta_de_trabalho.

... porém não está dando certo ...
A sua resposta acima equivale a você ligar para a oficina mecânica e dizer "o meu carro está com problema, como posso consertá-lo ?" ;)
Código: Selecionar todos
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Dim k As Long, dMax As Double, dMin As Double
  With Sheets("Planilha Avaliação de Calor")
   For k = 12 To 57 Step 9
    dMax = .Evaluate("Max(" & .Cells(k, 14).Resize(, 6).Address & ")")
    dMin = .Evaluate("Min(" & .Cells(k, 14).Resize(, 6).Address & ")")
     If dMax - dMin > 0.4 Then
      MsgBox "HÁ DIFERENÇAS NÃO PERMITIDAS NAS LEITURAS" & vbLf & vbLf _
      & "           O ARQUIVO NÃO SERÁ SALVO", vbInformation, "A T E N Ç Ã O"
     Cancel = True
     Exit Sub
     End If
  Next k
 End With
End Sub

Comparar valores

Enviado: 07 Jan 2019 às 14:35
por ppveiga
Se for possível prefiro o item b.
Instale o código abaixo no módulo de EstaPasta_de_trabalho.
FUNCIONOU PERFEITAMENTE!!!

porém não está dando certo ...
A sua resposta acima equivale a você ligar para a oficina mecânica e dizer "o meu carro está com problema, como posso consertá-lo ?"
VOU TENTAR EXPLICAR MELHOR: POR EXEMPLO VOCÊ ENTRA COM O VALOR DE 12:00 MINUTOS NA PRIMEIRA CÉLULA (PINTADA EM AZUL), JÁ EXIBE MENSAGEM DE ERRO, QUANDO NA VERDADE A SOMA DAS CÉLULAS EM AZUL É QUE NÃO PODE ULTRAPASSAR 60 MINUTOS. DE QUALQUER FORMA ENVIO EM ANEXO A PLANILHA TALVEZ POSSA TE AUXILIAR MELHOR.

Valeu!!!

Re: Comparar valores

Enviado: 07 Jan 2019 às 15:52
por osvaldomp
ppveiga escreveu: Nas células AA12, AA21, AA30, AA39, AA49, AA58, entra-se com valores de horas, das quais todas elas somadas, não pode ultrapassar 60 minutos, porém pode ser que tenha apenas uma atividade com 60 minutos ou no máximo seis atividades que somadas não podem ultrapassar 60 minutos.
Antes você informou que entraria com os valores em horas. Lembra disso? Em seguida eu sugeri que você formatasse as células para 13:30, ou seja, hh:mm. Aí o código foi elaborado considerando que as células contêm valores no formato hh:mm.
ppveiga escreveu: POR EXEMPLO VOCÊ ENTRA COM O VALOR DE 12:00 MINUTOS
Então, antes você informou que entraria com valores em horas, em seguida formatou as células para hh:mm, em consequência o valor 12:00 que você inseriu representa 12 horas e 0 minutos. Verifique com atenção o texto da mensagem de alerta pois ela exibe que você inseriu 12 horas e não 12 minutos.
Para inserir o valor 12 minutos entre com 0:12.

Comparar valores

Enviado: 08 Jan 2019 às 08:39
por ppveiga
Entendi!!! Então vou te pedir um último favor para fechar, assim não terei problemas com os cálculos da planilha.
Deixar as células formatadas como número, sem casas decimais, por exemplo, se digitar 58 já entende-se que são 58 minutos pois no texto da coluna já fala que esse valor é em minutos, dai a soma das colunas não pode ultrapassar o valor de 60, que seriam 60 minutos e se for possível também não salvar enquanto não acertar.

Obrigado

Re: Comparar valores

Enviado: 08 Jan 2019 às 13:36
por osvaldomp
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim dMax As Double, dMin As Double, h As Double
  If Target.Column = 27 Then
   h = Application.Sum(Range("AA12:AB65"))
  If h > 60 Then MsgBox "A soma dos tempos das atividades é de " _
    & h, vbInformation, "A T E N Ç Ã O"
  End If
  If Target.Column < 14 Or Target.Column > 19 Or _
   Cells(Target.Row, 13) <> "IBUTG" Or Application.CountA(Cells(Target.Row, 14).Resize(, 6)) < 5 Then Exit Sub
  dMax = Evaluate("Max(" & Cells(Target.Row, 14).Resize(, 6).Address & ")")
  dMin = Evaluate("Min(" & Cells(Target.Row, 14).Resize(, 6).Address & ")")
  If dMax - dMin > 0.4 Then MsgBox "A maior diferença entre as leituras é de " _
    & Format(dMax - dMin, "0.0"), vbInformation, "A T E N Ç Ã O"
End Sub
Código: Selecionar todos
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Dim k As Long, dMax As Double, dMin As Double, h As Double
  With Sheets("Planilha Avaliação de Calor")
   For k = 12 To 57 Step 9
    dMax = .Evaluate("Max(" & .Cells(k, 14).Resize(, 6).Address & ")")
    dMin = .Evaluate("Min(" & .Cells(k, 14).Resize(, 6).Address & ")")
     If dMax - dMin > 0.4 Then
      MsgBox "HÁ DIFERENÇAS NÃO PERMITIDAS NAS LEITURAS" & vbLf & vbLf _
      & "           O ARQUIVO NÃO SERÁ SALVO", vbInformation, "A T E N Ç Ã O"
     Cancel = True
     Exit Sub
     End If
   Next k
    h = Application.Sum(.Range("AA12:AB65"))
    If h > 60 Then
     MsgBox "A soma dos tempos das atividades é de " & h _
     & vbLf & vbLf & "        O ARQUIVO NÃO SERÁ SALVO", vbInformation, "A T E N Ç Ã O"
     Cancel = True
     Exit Sub
    End If
  End With
End Sub
obs. exclua uma linha entre as linhas 43 e 47, pois na Atividade 4 - HORA você mesclou 5 linhas e ficou diferente das demais, isso irá afetar o código que verifica antes de salvar; após excluir, a Atividade 5 iniciará na linha 48 e a 6 na linha 57

Comparar valores

Enviado: 08 Jan 2019 às 15:42
por ppveiga
Blz amigão, só fiquei com uma dúvida agora, a primeira vez que vc fez, quando a diferença era maios que 0,4, exibia uma mensagem "A maior diferença entre as leituras é de", agora não está exibindo mais, por favor, estou enviando o arquivo em anexo veja se inseri o bloco de programação de forma correta.

Valeu!

Re: Comparar valores

Enviado: 08 Jan 2019 às 16:31
por osvaldomp
Você instalou o código Private Sub Worksheet_Change(ByVal Target As Range) no módulo errado.

Comparar valores

Enviado: 09 Jan 2019 às 08:17
por ppveiga
blz, agora deu certo! Da forma como está, ficou muito bom, porém se possível gostaria de acertar as mensagens conforme segue:
"A maior diferença entre as leituras é de" - para - "A diferença entre as leituras é superior a 0,4"
"A soma dos tempos das atividades é de" - para - "A soma dos tempos das atividades é superior a 60 minutos"

Obrigado

Re: Comparar valores

Enviado: 09 Jan 2019 às 10:26
por osvaldomp
Fique à vontade. Coloque os textos que você desejar. ;)