背景:
1. win10, office 2016, hp Elitebook笔记本电脑
2. 统计数量时,在sheet (工作表)页面使用函数 sum通过类似 sum(c6:c8) 进行求和,其中C7未被计算在内,例子见图片或附件。即使使用 “数据透视表” 进行求和,依然不能把C7(例子数据,见下图) 中的数据有效识别为数字。
后续通过人工对比才发现,有一个单元格的数据没有被统计进去。因为结果被用来支付款项,造成给了一定的工作困难。
未被求和公式计算在内的单元格内容,疑似来自“复制”、“粘贴”的过程。原数据来自其它单位。
问题:
某个单元格中的数据,sheet(工作表)界面中,未被求和公式计算在内。
解决办法:
建议1. 理论上可以逐个单元格进行格式检查,并通过重新设置合适单元格个时候,重新输入数据来清除潜在的、无法被(求和等)函数自动识别为数字的单元格数据。数字多时,效率很低 。
建议2. 使用vba代码。可以用基本运算模式(这里是循环相加)替代各种公式(比如 range("c12").formula="=sum(c6:c8)", 或者 range("c12")=application.worksheetfunctioni.sum(....), 二者都不能给出正确求和结果21,而是给出14 ),vba可以自动把储存在文本格式单元格中的数据识别为数字,而正确求和;即时在单元格中输入英文状态的前置 " ' "加数字的格式,比如 '10, vba求和公式还是可以识别为数字,而正确求和。
建议2中的求和过程很简单。如果数据多,可以通过数组储存单元格内容后,再进行相关操作,不用频繁访问单元格,以提交效率。
例子图片,左侧sheet界面,右侧vba编辑界面:
为了方便测试,vba代码贴在这里。没有在顶部“代码”项中找到合适的类型,直接复制。
Public Sub MySum()
'功能:求和
'说明:
' 1. 能对不同单元格格式下的数字,求和
' 2. 避免了用函数时无法识别类似文本格式下,单元格储存的数字
Dim iLoop As Integer ' 如果行数太多,理论上可以设置为long
Dim startRow As Integer
Dim endRow As Integer
Dim calcCol As String '储存求和列代号
Dim total As Integer
startRow = 6
endRow = 8
calcCol = "c"
total = 0
For iLoop = startRow To endRow
total = total + Range(calcCol & iLoop)
Next
Range(calcCol & "10") = total
End Sub