none
Gostaria que a celula do excel dividisse um número automaticamente e mantivesse na mesma celula. RRS feed

  • Pergunta

  • Em exemplo, tenho a celula A1 e vou digitar nela o numero 200.
    Gostaria que quando eu digitasse o numero 200 nesta celula A1 ele dividisse automaticamente este valor por 100 mostrando na própria celula A1 o valor 2 é como se a celula tivesse uma formala ja condicionada a ela
    tudo que eu digita la vai se dividir por 100.... si eu escreve 1000 la.... assim q eu aperta enter vai aparece 10 por exemplo na mesma celula.

    existe como fazer isto no excel.

    Através da utilização VBA.

    sexta-feira, 18 de janeiro de 2013 09:34

Respostas

  • Cole o código abaixo na classe da planilha em que deseja reproduzir esse efeito:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
        
        If IsNumeric(Target) Then
            Application.EnableEvents = False
            Target = Target / 100
            Application.EnableEvents = True
        End If
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 19 de janeiro de 2013 16:38
    Moderador
  • Boa noite Michael.

    Acho que encontrei uma solução pra você, apesar de não gostar muito desse tipo de solução. Mas de toda forma aí vai:

    Public x As Long
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    
    If x <> Range("B5") Then Calc = 0 Else Calc = 1
    
    If Not Intersect(Target, Range("B6")) Is Nothing And Calc = 0 Then 'Note que escrevi "B6"!
        Range("B5") = Range("B5") / 10
        
        x = Range("B5")     'Memoriza o Valor Anterior
    End If
    
    End Sub

    Coloque esse código num evento Woorksheet. Mas lembre-se, esse pequeno código sempre será executado quando você mudar de célula, mas somente será executada a operação quando você alterar o valor da célula e apertar 'Enter' ou selecionar a célula de baixo, como você solicitou. Se clicar com o mouse em outra célula a operação não será feita.

    Você também pode incluir no 'If' as demais células vizinhas, se desejar.

    Um abraço.


    Filipe Magno

    Michel,

    favor desconsiderar a solução acima e utilizar o código a seguir:

    Public x As Double
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    
    If x <> Range("B5") Then Calc = 0 Else Calc = 1
    
    If Intersect(Target, Range("B5")) Is Nothing And Calc = 0 Then
        Range("B5") = Range("B5") / 10
        
        x = Range("B5")     'Memoriza o Valor Anterior
    End If
    
    End Sub

    Dessa forma não importa mais qual célula será selecionada ao alterar o valor da célula desejada (no caso "B5").

    Também troquei a declaração da variável, que estava erroneamente declarada como "Long".

    Acho que dessa forma funciona certinho.

    Vlw.


    Filipe Magno

    sábado, 19 de janeiro de 2013 22:31

Todas as Respostas

  • Boa noite Michael.

    Acho que encontrei uma solução pra você, apesar de não gostar muito desse tipo de solução. Mas de toda forma aí vai:

    Public x As Long
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    
    If x <> Range("B5") Then Calc = 0 Else Calc = 1
    
    If Not Intersect(Target, Range("B6")) Is Nothing And Calc = 0 Then 'Note que escrevi "B6"!
        Range("B5") = Range("B5") / 10
        
        x = Range("B5")     'Memoriza o Valor Anterior
    End If
    
    End Sub

    Coloque esse código num evento Woorksheet. Mas lembre-se, esse pequeno código sempre será executado quando você mudar de célula, mas somente será executada a operação quando você alterar o valor da célula e apertar 'Enter' ou selecionar a célula de baixo, como você solicitou. Se clicar com o mouse em outra célula a operação não será feita.

    Você também pode incluir no 'If' as demais células vizinhas, se desejar.

    Um abraço.


    Filipe Magno

    sábado, 19 de janeiro de 2013 01:05
  • Cole o código abaixo na classe da planilha em que deseja reproduzir esse efeito:

    Private Sub Worksheet_Change(ByVal Target As Range)
        If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
        
        If IsNumeric(Target) Then
            Application.EnableEvents = False
            Target = Target / 100
            Application.EnableEvents = True
        End If
    End Sub


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sábado, 19 de janeiro de 2013 16:38
    Moderador
  • Boa noite Michael.

    Acho que encontrei uma solução pra você, apesar de não gostar muito desse tipo de solução. Mas de toda forma aí vai:

    Public x As Long
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    
    If x <> Range("B5") Then Calc = 0 Else Calc = 1
    
    If Not Intersect(Target, Range("B6")) Is Nothing And Calc = 0 Then 'Note que escrevi "B6"!
        Range("B5") = Range("B5") / 10
        
        x = Range("B5")     'Memoriza o Valor Anterior
    End If
    
    End Sub

    Coloque esse código num evento Woorksheet. Mas lembre-se, esse pequeno código sempre será executado quando você mudar de célula, mas somente será executada a operação quando você alterar o valor da célula e apertar 'Enter' ou selecionar a célula de baixo, como você solicitou. Se clicar com o mouse em outra célula a operação não será feita.

    Você também pode incluir no 'If' as demais células vizinhas, se desejar.

    Um abraço.


    Filipe Magno

    Michel,

    favor desconsiderar a solução acima e utilizar o código a seguir:

    Public x As Double
    
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    
    If x <> Range("B5") Then Calc = 0 Else Calc = 1
    
    If Intersect(Target, Range("B5")) Is Nothing And Calc = 0 Then
        Range("B5") = Range("B5") / 10
        
        x = Range("B5")     'Memoriza o Valor Anterior
    End If
    
    End Sub

    Dessa forma não importa mais qual célula será selecionada ao alterar o valor da célula desejada (no caso "B5").

    Também troquei a declaração da variável, que estava erroneamente declarada como "Long".

    Acho que dessa forma funciona certinho.

    Vlw.


    Filipe Magno

    sábado, 19 de janeiro de 2013 22:31