Excel VBA 带有变量运算符的数学类型公式不适用于小数
Excel VBA math type formula with variable operator doesn't work on decimal numbers
我有一个小脚本,旨在执行简单的数学运算,其中运算符被定义为一个变量。唯一的问题是它只适用于整数,而不适用于小数。任何人都知道为什么?
我试图将运算符和数字分成两个变量,但问题仍然存在。
Sub CellMath2()
Call CreateSheetBackup
Dim rng As Range
Dim expression As Variant
expression = InputBox("Enter operator (* / + - ^) and number (e.g. ""*1000"").", "Operator and number")
If StrPtr(expression) = 0 Then Exit Sub
For Each rng In Selection
If WorksheetFunction.IsNumber(rng) Then
rng.Value = "=" & rng & expression
rng.Value = rng.Value
Else
End If
Next rng
End Sub
尝试在输入框后使用以下行:
If Application.ThousandsSeparator = " " Then expression = Replace(expression, " ", "")
If Application.DecimalSeparator = "," Then expression = Replace(expression, ",", ".")
我可以将运算符和数字分开并使用 case select 语句,但是我必须包含所有可能的运算符并将功能限制为我包含的运算符。
这有效,在输入框和单元格中使用小数点逗号:
Sub CellMath()
Dim rng As Range
Dim c As Variant, operator As Variant
operator = InputBox("Enter operator (* / + - ^ or e).", "Operator")
If StrPtr(operator) = 0 Then Exit Sub
c = InputBox("Enter number.", "Number")
If StrPtr(c) = 0 Then Exit Sub
For Each rng In Selection
If WorksheetFunction.IsNumber(rng) Then
Select Case operator
Case "*"
rng.Value = rng * c
Case "/"
rng.Value = rng / c
Case "+"
rng.Value = rng + c
Case "-"
rng.Value = rng - c
Case "^"
rng.Value = rng ^ c
Case "e"
rng.Value = rng * 10 ^ c
End Select
Else
End If
Next rng
End Sub
我在这里忘记了任何有趣的运算符吗?
您正在寻找的是 Evaluate
方法。
这样的用法:
For Each rng In Selection
If WorksheetFunction.IsNumber(rng) Then
rng.Value = Evaluate(Replace(rng & expression, ",", "."))
End If
Next rng
Evaluate
接受与公式相同的运算符样式,至少在很大程度上是这样,所以如果 A1
的值为 10
和 expression="+10"
,则Evaluate(Range("A1") & expression
会给你 20
.
Replace(rng, ",", ".")
将欧洲小数转换为美国标准(VBA 使用)。
我有一个小脚本,旨在执行简单的数学运算,其中运算符被定义为一个变量。唯一的问题是它只适用于整数,而不适用于小数。任何人都知道为什么? 我试图将运算符和数字分成两个变量,但问题仍然存在。
Sub CellMath2()
Call CreateSheetBackup
Dim rng As Range
Dim expression As Variant
expression = InputBox("Enter operator (* / + - ^) and number (e.g. ""*1000"").", "Operator and number")
If StrPtr(expression) = 0 Then Exit Sub
For Each rng In Selection
If WorksheetFunction.IsNumber(rng) Then
rng.Value = "=" & rng & expression
rng.Value = rng.Value
Else
End If
Next rng
End Sub
尝试在输入框后使用以下行:
If Application.ThousandsSeparator = " " Then expression = Replace(expression, " ", "")
If Application.DecimalSeparator = "," Then expression = Replace(expression, ",", ".")
我可以将运算符和数字分开并使用 case select 语句,但是我必须包含所有可能的运算符并将功能限制为我包含的运算符。
这有效,在输入框和单元格中使用小数点逗号:
Sub CellMath()
Dim rng As Range
Dim c As Variant, operator As Variant
operator = InputBox("Enter operator (* / + - ^ or e).", "Operator")
If StrPtr(operator) = 0 Then Exit Sub
c = InputBox("Enter number.", "Number")
If StrPtr(c) = 0 Then Exit Sub
For Each rng In Selection
If WorksheetFunction.IsNumber(rng) Then
Select Case operator
Case "*"
rng.Value = rng * c
Case "/"
rng.Value = rng / c
Case "+"
rng.Value = rng + c
Case "-"
rng.Value = rng - c
Case "^"
rng.Value = rng ^ c
Case "e"
rng.Value = rng * 10 ^ c
End Select
Else
End If
Next rng
End Sub
我在这里忘记了任何有趣的运算符吗?
您正在寻找的是 Evaluate
方法。
这样的用法:
For Each rng In Selection
If WorksheetFunction.IsNumber(rng) Then
rng.Value = Evaluate(Replace(rng & expression, ",", "."))
End If
Next rng
Evaluate
接受与公式相同的运算符样式,至少在很大程度上是这样,所以如果 A1
的值为 10
和 expression="+10"
,则Evaluate(Range("A1") & expression
会给你 20
.
Replace(rng, ",", ".")
将欧洲小数转换为美国标准(VBA 使用)。