在小数分隔符后自动写入2位数字

时间:2018-02-27 15:49:35

标签: excel vba excel-vba onchange

我有一个可行的代码,但如果可能的话,我想简化它。 当范围内的单元格值发生变化时,此代码有效。它检查插入的数据是否为数字,然后自动将其除以100,因此我不必使用分隔整数和小数的字符,当你有数千个数字插入时,这会产生很多不同之处片材。

我的代码是:

Public Sub Worksheet_Change(ByVal Target As Range)
Set Intersecao = Intersect(Target, Range("ENTRANUMEROS"))

If (Not (Intersecao Is Nothing)) And (Not IsEmpty(Intersecao)) Then

    On Error GoTo Fim

    Dim Entrada As Double: Entrada = Intersecao.Value

    Application.EnableEvents = False
    If IsNumeric(Entrada) Then
        Entrada = Entrada / 100
        Intersecao.Value = Entrada
    Else
        MsgBox ("Invalid data.")
        Intersecao.Value = ""
        Intersecao.Select
    End If
    Application.EnableEvents = True

End If

Fim:
End Sub

3 个答案:

答案 0 :(得分:4)

在VBA中,您可以使用:

Sub TestMe()
    Application.FixedDecimal = True
    Application.FixedDecimalPlaces = 2
End Sub

答案 1 :(得分:3)

使用Excel选项Advanced> 自动插入小数点> 2
通常添加一个小数点。

除了使用VBA切换该选项之外,没有办法仅将此设置为已定义的范围:

Public Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set Intersecao = Intersect(Target, Range("ENTRANUMEROS"))

    If (Not (Intersecao Is Nothing)) And (Not IsEmpty(Intersecao)) Then
        Application.FixedDecimal = True
        Application.FixedDecimalPlaces = 2
    Else
        Application.FixedDecimal = False
    End If
End Sub

请注意,此示例不会保留用户选择的原始状态。

(对不起德国截图。)

enter image description here

答案 2 :(得分:1)

根据作者的评论:

  

我的意思是,从数字键盘插入,比方说,123456,得到1,234.56   自动进入单元格

你可以减少100:

result = Format(Number/100, "#,##0.00")

或者,将最后2位数作为小数字作为子串:

result = MID(number, 1, LEN(number)-2)&"."& RIGHT(Number, 2)