Página 1 de 1

Converter Números com vírgula

Enviado: 20 Abr 2020 às 08:06
por AfonsoMira
Boas.

Existe algum código onde por exemplo insiro o número 2,6 numa célula e ao correr a macro ele arredonda o numero para 3, mas caso esteja 2,4 ele teria que arredondar para 2,5 e caso escreve 2,5 não arredonda.

Existe alguma for de fazer isto sem recorrer a macro?

Obrigado.

Re: Converter Números com vírgula

Enviado: 20 Abr 2020 às 08:24
por babdallas
Se quiser na mesma célula que digitou, só com macro. Em outra célula daria para fazer com fórmula. O que prefere?

Converter Números com vírgula

Enviado: 20 Abr 2020 às 08:43
por AfonsoMira
Na mesma célula.

A minha ideia era criar uma macro com um Select Case.

Não sei se é boa ideia ou se existe algo mais fácil.

Re: Converter Números com vírgula

Enviado: 20 Abr 2020 às 09:49
por babdallas
Veja se atende.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim lng2Digitos      As Long
    
    If Not Application.Intersect(Target, wshTeste.Range("C3:F8")) Is Nothing And _
        VBA.IsNumeric(Target.Value2) Then
        lng2Digitos = (Target.Value2 - VBA.Int(Target.Value2)) * 100
        
        Application.EnableEvents = False
        If lng2Digitos > 50 Then
            Target.Value2 = VBA.Round(Target.Value2)
        Else
            Target.Value2 = VBA.Int(Target.Value2) + 0.5
        End If
        Application.EnableEvents = True
    End If
End Sub

Re: Converter Números com vírgula

Enviado: 20 Abr 2020 às 09:59
por babdallas
Acho que assim fica melhor.
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, wshTeste.Range("C3:F8")) Is Nothing And _
        VBA.IsNumeric(Target.Value2) Then
        
        Application.EnableEvents = False
        
        If VBA.Round(Target.Value2) = VBA.Int(Target.Value2) + 1 Then
            Target.Value2 = VBA.Round(Target.Value2)
        Else
            Target.Value2 = VBA.Int(Target.Value2) + 0.5
        End If
        Application.EnableEvents = True
    End If
End Sub

Converter Números com vírgula

Enviado: 20 Abr 2020 às 11:55
por AfonsoMira
Sim é isso mas quando eu insiro o número 2 ele arredonda para 2,5 e eu queria que se o número já fosse inteiro não arredondava.

Existe maneira de fazer isso? Penso que com um IF dê.

Re: Converter Números com vírgula

Enviado: 20 Abr 2020 às 11:57
por babdallas
Veja agora
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, wshTeste.Range("C3:F8")) Is Nothing And _
        VBA.IsNumeric(Target.Value2) Then
        
        Application.EnableEvents = False
        
        If Target.Value2 <> VBA.Int(Target.Value2) Then
            If VBA.Round(Target.Value2) = VBA.Int(Target.Value2) + 1 Then
                Target.Value2 = VBA.Round(Target.Value2)
            Else
                Target.Value2 = VBA.Int(Target.Value2) + 0.5
            End If
            Application.EnableEvents = True
        End If
    End If
End Sub

Converter Números com vírgula

Enviado: 20 Abr 2020 às 12:02
por AfonsoMira
Agora não está a executar a macro apenas deixa estar os números que estou a inserir.

Re: Converter Números com vírgula

Enviado: 20 Abr 2020 às 12:38
por babdallas
Coloquei um If a mais na resposta anterior e esqueci de alterar a posição do Application.EnableEvents = True.

Veja agora:
Código: Selecionar todos
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, wshTeste.Range("C3:F8")) Is Nothing And _
        VBA.IsNumeric(Target.Value2) Then
        
        Application.EnableEvents = False
        
        If Target.Value2 <> VBA.Int(Target.Value2) Then
            If VBA.Round(Target.Value2) = VBA.Int(Target.Value2) + 1 Then
                Target.Value2 = VBA.Round(Target.Value2)
            Else
                Target.Value2 = VBA.Int(Target.Value2) + 0.5
            End If
        End If
        Application.EnableEvents = True
    End If
End Sub

Converter Números com vírgula

Enviado: 21 Abr 2020 às 07:45
por AfonsoMira
É mesmo isto!
Obrigado pela ajuda! :D