Notifications
Clear all

Manter casas decimais

21 Posts
4 Usuários
0 Reactions
4,914 Visualizações
(@mateus0203)
Posts: 53
Trusted Member
Topic starter
 

Boa noite amigo,

A situação é simples, porém acredito que a resolução não seja tanto assim.

Suponhamos que na célula A1 eu tenha um valor, por exemplo, 0,0078. Neste caso, então, há dois algarismos significativos (7 e 8).
Suponhamos que após algumas operações esse valor da célula A1 se torne 0,01725.

Eu gostaria de uma forma de guardar a quantidade de algarismos significativos da célula A1 antes da operação, e atribuir esta mesma quantidade de algarismos significativos ao número resultante depois da operação. Então ficaria assim:

1 - Antes da operação: 0,0078
2 - (Operação)
3 - Depois da operação: 0,017

O problema é que depois da operação ele volta com vários algarismos significativos (0,01725, nesse caso 4 algarismos)

 
Postado : 01/10/2017 4:54 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Tente assim!!

Private Sub Worksheet_Change(ByVal Target As Range)
'Esse código deve ficar dentro do módulo de guia
    Dim NewValue, OldValue
    If Target.Address <> "$A$1" Then Exit Sub
    Application.EnableEvents = False
    With Target
        NewValue = .Value
        Application.Undo
        OldValue = .Value
        .Value = NewValue + OldValue
    End With
    Application.EnableEvents = True
End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/10/2017 6:17 am
(@mateus0203)
Posts: 53
Trusted Member
Topic starter
 

Alexandre, esta macro que você fez só funciona para a célula A1, mas eu precisarei que esse procedimento seja feito na célula atual.

Outro detalhe é que eu preciso que o código funcione dentro de uma rotina, onde este procedimento vai ser feito num determinado momento. Seria assim:

Do While .........

1 - Outros procedimentos
2 - Estando na célula desejada, guardar o numero de algarismos significativos
3 - Fazer algumas operações com variáveis e postar o valor na célula novamente
4 - Atribuir ao novo valor, após a operação, aquele número de algarismos significativos de antes
5 - Outros procedimentos

Loop

 
Postado : 02/10/2017 1:58 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Alexandre, esta macro que você fez só funciona para a célula A1, mas eu precisarei que esse procedimento seja feito na célula atual.

Mude o parâmetro, para ActiveCell ou o que desejar!!!

Outro detalhe é que eu preciso que o código funcione dentro de uma rotina, onde este procedimento vai ser feito num determinado momento. Seria assim:

Você só precisa remover e mudar as partes que ão particular do evento " Worksheet_Change", como Target.etc.

Depois aplicar no seu real caso!

Do While .........

'1 - Outros procedimentos
'2 - Estando na célula desejada, guardar o numero de algarismos significativos
'3 - Fazer algumas operações com variáveis e postar o valor na célula novamente
'4 - Atribuir ao novo valor, após a operação, aquele número de algarismos significativos de antes
'5 - Outros procedimentos

Loop

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 03/10/2017 7:52 am
(@mateus0203)
Posts: 53
Trusted Member
Topic starter
 

Alexandre, primeiramente obrigado pelo esforço! Esse procedimento que você me mostrou funciona, mas ele pra mim ainda não vai ser ideal por um motivo:

Colocando ele no módulo de guia, mesmo alterando a natureza do evento como você falou acima, ele vai ser acionado várias outras vezes na minha rotina, pois a minha rotina é um "tratamento de dados" que a cada repetição tem uma finalidade. Acontece que em outros momentos não será desejado acionar este ajuste de algarismos significativos, o que acontecerá nestas repetições que lhe falei.

O que seria ideal pra mim seria apenas um código pra funcionar num lugar específico da minha rotina fazendo o que eu disse na primeira mensagem.

Tenho procurado e sinceramente não vi em nenhum lugar algo que solucione. Mas você está perto de me ajudar!

 
Postado : 06/10/2017 12:50 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Eu não sei se vou conseguir te ajudar, pois eu não estou entendendo como sua rotina vai resolver essa questão sem o auxilio dos eventos como " Worksheet_Change" e etc.

Mas visto que minha dica não deu certo, então tente armazenar os valores temporariamente em um variável ou célula:

Sub teste()
Dim vSum As Variant
Dim vXFD1 As Variant

vXFD1 = [XFD1].ClearContents
'While ....
    If ActiveCell.Value <> "" Then
        vXFD1 = ActiveCell.Value
        vSum = ActiveCell.Value + vXFD1
    End If
    [XFD1].Value = vSum
    ActiveCell.Value = [XFD1].Value
'End While
End Sub

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 06/10/2017 7:16 am
(@osvaldomp)
Posts: 0
Eminent Member
 

Veja se ajuda.

Sub Teste()
 Dim x As Long, k As Long, m As Long, v As String
  On Error GoTo fim
  v = ActiveCell.Value
  m = InStr(1, v, ",") 'posição da vírgula
  For k = m + 1 To Len(v)
   If Mid(v, k, 1) > 0 Then x = x + 1 'conta algarismos significativos
  Next k
  v = v + 0.00945 'novo valor obtido ao adicionar 0,00945 ao valor da célula ativa _
   coloque aqui a sua "operação"
  m = InStr(1, v, ",") 'posição da vírgula no novo valor
  For k = m + 1 To Len(v)
   If Mid(v, k, 1) > 0 Then Exit For 'busca o primeiro algarismos significativo
  Next k
  v = Left(v, k + x - 1) 'trunca o novo valor com base em "x"
  ActiveCell.Value = v * 1 'insere o novo valor na célula ativa
fim:
End Sub

Osvaldo

 
Postado : 06/10/2017 11:34 am
(@mateus0203)
Posts: 53
Trusted Member
Topic starter
 

Osvaldo, bom dia!

Este código que você me deu quase deu certo, o problema é que ele exclui os zeros que estão à esquerda. Por exemplo, tenho o número 0,0077395, depois da função Left ele fica eu deveria ter 0,0071532, mas fica 7,1532.

 
Postado : 10/10/2017 4:38 am
(@osvaldomp)
Posts: 0
Eminent Member
 

Por exemplo, tenho o número 0,0077395, depois da função Left ele fica eu deveria ter 0,0071532, mas fica 7,1532.

1. coloquei em uma célula o valor 0,0077395 ~~~> igual ao seu exemplo acima, e que contém 5 dígitos significativos
2. no código que passei, no trecho que você vai colocar a sua "operação", coloquei como exemplo ~~~> v = v - 0.0005862123456
3. resultado da operação acima ~~~> 0,0071532876544 (que contém 11 dígitos significativos)
4. em seguida o código trunca o valor do item acima com 5 dígitos significativos e o coloca na célula ativa, resultado ~~~> 0,0071532
Foi o que eu entendi que você quer. Não faço ideia de como você obteve o resultado 7,1532

Se não for isso disponibilize uma amostra do seu arquivo com o código instalado, com alguns exemplos na planilha, com os resultados obtidos com o código e quais os resultados desejados para cada exemplo e as explicações de como obteve os resultados.

Osvaldo

 
Postado : 10/10/2017 7:16 am
(@mateus0203)
Posts: 53
Trusted Member
Topic starter
 

Boa tarde galera. Eu gostaria de um código pra manter o número de casas decimais de um valor após uma operação. Exemplo:

O que ocorre:
...
0,085
(Operações)
0,0843548
...

O que eu gostaria:
...
0,085
(Operações)
0,084
...

Preciso de um código pra inseri-lo em uma rotina bem extensa, então é desejável que não seja um código dentro do módulo da quia.

 
Postado : 24/10/2017 1:34 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

.
Usa a função ARRED e formata a celula para nº com 3 casas ... ARRED(sua formula;3)
.

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 24/10/2017 1:53 pm
(@osvaldomp)
Posts: 0
Eminent Member
 

Coincidência: este tópico é semelhante ao tópico do link abaixo (que foi abandonado ... ) ;) :?:

http://www.planilhando.com.br/forum/viewtopic.php?f=10&t=26172&p=130776#p130776

Osvaldo

 
Postado : 24/10/2017 1:59 pm
(@mateus0203)
Posts: 53
Trusted Member
Topic starter
 

.
Usa a função ARRED e formata a celula para nº com 3 casas ... ARRED(sua formula;3)
.

O problema é que o número de casas decimais dos valores é variado, alguns têm uma casa decimal, outros têm oito casas decimais... Gostaria de um jeito de guardar o número de casas decimais da célula atual e depois de umas operações, fazer com que ele tenha o mesmo número de casas decimais.

 
Postado : 24/10/2017 2:00 pm
(@mateus0203)
Posts: 53
Trusted Member
Topic starter
 

Coincidência: este tópico é semelhante ao tópico do link abaixo (que foi abandonado ... ) ;) :?:

http://www.planilhando.com.br/forum/viewtopic.php?f=10&t=26172&p=130776#p130776

Osvaldo, agora o problema é parecido, mas não igual. Agora quero manter as casas decimais, não números significativos. Infelizmente não consegui adaptar os códigos que me foram dados por você e outros neste tópico para o meu código.
Entendo que o problema seja eu, pois não consegui entender os códigos fornecidos e adaptá-los, porque sou amador e ainda não pude me aprofundar bem na teoria para fugir de pequenas dúvidas que entendo que sejam básicas.

Vá me desculpando!

 
Postado : 24/10/2017 2:04 pm
(@mateus0203)
Posts: 53
Trusted Member
Topic starter
 

Vou completar um mês com o mesmo problema e até agora nada. Até parece simples, mas até agora nenhuma resposta que eu possa aplicar no meu código. Pelo jeito precisarei ler um livro sobre VBA pra enfim não ficar impedido em problemas assim nem precisando de respostas neste fórum.

 
Postado : 24/10/2017 7:01 pm
Página 1 / 2