excel, 函数埋坑的,vba可以避坑

背景:

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 

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值