Excel对包含文字的单元格计算求值

Excel对包含文字的单元格计算求值

在录入Excel数据的时候,我们有可能为了便于直接记录,会在单元格中出现这样的公式

  • 1+2+3
  • 1米+2米+3米
  • 。。。

这种公式的奇特点在于Excel不能直接计算得出结果,接下来我们怎么使用一个通用的函数来实现计算

解题思路:

  • 去除掉公式中非数字、加减乘除运算符号
  • 通过VBA中的Evaluate对最终的公式进行计算

终极函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
Function CalculateWithText(ParamArray args() As Variant)
Dim objFormula As String

Dim result As String
Dim current As String
Dim eachRange As Range
For Each Rng In args
For Each eachRange In Rng
If result <> "" Then
result = result + "+"
End If
result = result + CStr(CalculateText(eachRange.Value))
'result = result + CalculateText(eachRange.Value)
Next
result = CStr(Evaluate(result))
Next
Debug.Print result
CalculateWithText = Evaluate(result)
End Function

Function CalculateText(objFormula As String)
Dim current As String
Dim validSymbol As String
validSymbol = "+,-,*,/,."
'Ìæ»»»»Ðзû¡¢¿Õ¸ñµÈ
objFormula = Replace(objFormula, vbNewLine, "+")
objFormula = Replace(objFormula, vbCr, "+")
objFormula = Replace(objFormula, vbLf, "+")
objFormula = Replace(objFormula, vbCrLf, "+")
objFormula = Replace(objFormula, " ", "+")
For n = 1 To Len(objFormula)
current = Mid(objFormula, n, 1)
If IsNumeric(current) Or IsInArray(current, Split(validSymbol, ",")) Then
result = result + current
End If
Next n
CalculateText = Evaluate(result)
End Function

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function

支持功能:

  • 计算带文本公式
  • 支持多区间和单元格计算
  • 支持单元格中内容包含换行
  • 支持单元格中内容包含空格
  • 解决单元格过多导致计算#Value!错误