原因
公司制作了一个表格,属于统计类表格,基本都是数值型的,通过单元格格式设置为两位小数后,发给财务,发现分数据和总数据核对不一致,至此产生了真两位小数的需求。
由于每个单元格的计算公式不一样,无法使用通用的拖拉来解决批量公式设置问题;
使用excel的替换功能也没用通配符,因此无法批量替换;
方案
不得已,搬出VBA,网上查询一番,最后写下如下代码
Sub 全部加上ROUND两位小数()
Dim cel As Range
For Each cel In Selection
If cel.HasFormula Then
Dim str As String
str = Replace(cel.Formula, "=", "")
If Left(str, 5) <> "ROUND" Then
cel.Formula = "=ROUND(" + str + ",2)"
End If
End If
Next cel
End Sub
- 通过cel.HasFormula判断是否有公式
- 通过Left(str, 5) <> "ROUND"判断是否是ROUND函数开头(排除重复替换问题)
- 之所以把str单独出来,纯属过程中好排查出问题的原因,可以合并到下下步,一步到位
- 没有排除其他文本型单元格的公式替换,所以选择的时候,只能选需要替换的单元格,不能Ctrl+A通选
注意
过程中卡了几分钟,原因居然是公式写错了,忘记加上,2两位小数设置
所以要首先保证公式的正确性