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 的值为 10expression="+10",则Evaluate(Range("A1") & expression 会给你 20.

Replace(rng, ",", ".") 将欧洲小数转换为美国标准(VBA 使用)。