实例需求:A列到F列为文本数据,每个单元格中包含3个数字,数字之间使用竖线分隔,现需要计算每个单元格中的数字之后。
例如F15单元格内容为10┃5┃18
,则需要计算10、5、18三个数字之和,结果为33,写入单元格M15,如下图所示。
这个数据还算规范,使用统一的分隔符(竖线),通常的实现思路是使用split
拆分数组,再逐个累加,对于本示例来说,数字个数不多,这样处理效率也还不错。
但是更高效的方法是利用Evaluate
快速计算公式结果,示例代码如下。
Sub demo()
Set rngData = [a1].CurrentRegion
arrData = rngData.Value
For iRow = 1 To UBound(arrData)
For iCol = 1 To UBound(arrData, 2)
txt = arrData(iRow, iCol)
If Len(txt) > 0 Then arrData(iRow, iCol) = Application.Evaluate(Replace(txt, "┃", "+"))
Next iCol
Next iRow
rngData.Offset(0, 7).Value = arrData
End Sub
【代码解析】
第2行代码获取数据单元格区域。
第3行代码将数据内容读取到数组中。
第4~9行代码循环处理数组中的数据。
第6行代码读取数组(单元格)的数据。
第7行代码判断单元格内容是否为空,如果为空,那么使用Replace
将竖线替换为加号,然后调用Evaluate
计算表达式(相当于公式)的值。
第10行代码将计算写过回写到H列到M列对应的单元格中。
本示例并不复杂,实现方法有很多种,大家如果可以充分利用Excel VBA的一些功能,那么就可以事半功倍,虽然本文标题是统计数字之和,但是计算计算这些数字的乘积,也可以使用同样的方法,大家可以灵活变通。