一个超强的计算式,支持超长计算以及备注等等
Function JC(C As Range) As Double
Dim s As String
Dim regex As Object
Dim tmp0 As String, tmp1 As String
Dim a() As String, b() As String
Dim i As Integer
Dim ST As Integer, ED As Integer
Dim D As Integer
' 获取输入单元格的值
s = C.Value
' 检查输入是否为空,如果为空则返回0
If s = "" Then
JC = 0
Exit Function
End If
' 处理中括号,更改字体颜色为蓝色
For D = 1 To Len(s)
Select Case Mid(s, D, 1)
Case "[", "【": ST = D
Case "]", "】": ED = D
C.Characters(Start:=ST, Length:=ED - ST + 1).Font.ColorIndex = 5 '颜色为蓝色
End Select
Next D
' 初始化正则表达式对象
Set regex = CreateObject("VBScript.RegExp")
regex.Global = True
regex.IgnoreCase = True
' 字符串替换,支持数学运算和函数
tmp0 = "+、-、×、÷、。、(、)、【、】、\[[^\[\]]*\]|【[^【】]*】|(Math\.)(?=\1)、[\u4e00-\u9fa5]+、\s、(sin|cos|tan)\(([0-9.]+)\)、([0-9.]+)\%、([0-9.]+)\‰、([0-9.)]+)\("
tmp1 = "+、-、*、/、.、(、)、[、]、、、、$1($2*3.141592654/180)、($1/100)、($1/1000)、$1*("
a = Split(tmp0, "、")
b = Split(tmp1, "、")
For i = 0 To UBound(a)
regex.Pattern = a(i)
s = regex.Replace(s, b(i))
Next i
' 如果字符串长度小于255,则使用Application.Evaluate计算
If Len(s) < 255 Then
JC = Application.Evaluate(s)
Exit Function
End If
' 更多字符串替换,添加函数支持
tmp0 = "\blog10e\b、\bln(?=10\b|2\b)、\blog\(、(\d*\.?\d+|\w*\([^\(\)]*\)|\w+)\^(-?\d*\.?\d+|\w*\([^\(\)]*\)|\w+)、" & _
"\bTRUNC\b、\bInt\b、\b(sqrt|round|random|pow(er)?|PI|min|max|log(10E)?|ln(2|10)|exp|E|abs|a?tan2?|a?sin|a?cos)\b、" & _
"power\b、Math.e\b、\.pi(\(\))?、\b(Math\.)?ln\(、(-\+*-|\+)+(?=[\+\-])|[\+\-]+$、--、"
tmp1 = "LOG10E、LN、LOG10E*log(、pow($1,$2)、" & _
"parseInt、Math.floor、Math.$1、pow、Math.E、.PI、Math.log(、、+、、"
a = Split(tmp0, "、")
b = Split(tmp1, "、")
For i = 0 To UBound(a)
regex.Pattern = a(i)
s = regex.Replace(s, b(i))
Next i
' 使用JavaScript语言计算超长计算式
With CreateObject("htmlfile")
.write "<html><script></script></html>"
JC = CallByName(.parentwindow, "eval", VbMethod, s)
End With
End Function
该函数适用以下书写方式
15【个人】+1个
1+2*(4-6/2)支持四则运算括号
2个人+3个人 支持中文直接注释
35+5 支持注释行
5+5
三月 5个
四月 +6个
五月 +7个
支持空格 换行等书写方式 但请勿使用标点符号 因为容易被误识别
sin(30)支持三角函数 改成角度了
【中括号注释自动变蓝】1[支持各种中括号]
【←单位列输入123可以得到m m2 m3 简单快捷 容易理解】1+1
0 当然 也可以下拉选择
123/41
123÷41 支持全角运算符
20%+30‰ 支持百分号 千分号
1+.2 支持省略小数点前的零
.1+.2 跟按计算器习惯一致
2 数量列也支持计算式 注释
45+5
36+6
15.3*0.33
2+53
15+5
3+5
2+6
05+5
需1+5个
sin(30)
1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1
3+3
[+-*/()中文]0
1+2法官-3/4*5【在】
[+-*/()中文]
WPS函数专家