我有一个可行的代码,但如果可能的话,我想简化它。 当范围内的单元格值发生变化时,此代码有效。它检查插入的数据是否为数字,然后自动将其除以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
答案 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
请注意,此示例不会保留用户选择的原始状态。
(对不起德国截图。)
答案 2 :(得分:1)
根据作者的评论:
我的意思是,从数字键盘插入,比方说,123456,得到1,234.56 自动进入单元格
你可以减少100:
result = Format(Number/100, "#,##0.00")
或者,将最后2位数作为小数字作为子串:
result = MID(number, 1, LEN(number)-2)&"."& RIGHT(Number, 2)