VBA-变态表格求和

有如下这样一个变态的表格。我们需要在右边红色的单元格中计算出左边的数据的和。这个求和的变态之处在于左边的数据可能有1行,两行,甚至是10几行。Boss要求的是既要求和,还要根据单位的不同保留不同的小数位数。最要命的是,这个表格很大,如果手工做的话,可能没做完就要吐血身亡了。
变态图片

不如用VBA试试吧。我实在是不想手工做,看起来就头晕。

首先分析一下表格的规律:
1. 求和的项都是合并的单元格(3个合并单元格)。例如2-7行的“挖土石方”。
2. 要求和的数据都是只有一行或者是每隔两行有一组数据(例如第10行、第4行和第6行)
3.单位都是在第3列

程序的逻辑基本就是这样:
1.判断第一列的第n行的单元格是否为合并单元格,如果是的话,说明是求和项,进入2。
2.得到求和的区域
3.根据单位在第12列写入公式

Sub 求和()
    i = 7   '开始行
    s = 0   '求和数据所在行号
    e = 0   '合并的最后一个单元格行号
    While i < 1566 ' 这个数根据自己表格行数定
        If Range("A" & i).MergeCells Then '判断单元格Ai是否为合并单元格
            s = i + 2 '得到求和数据所在行
            e = Range("A" & i).MergeArea.Count + s '合并的最后一个单元格行号
            gs = "D" & s & ":K" & s '求和的区域
            While e > s + 3 '如果求和的区域大于一个
                gs = gs & ",D" & s + 3 & ":K" & s + 3 '添加求和区域
                s = s + 3
            Wend

            If Range("C" & i).Value = "m" Or Range("C" & i).Value = "m2" Or Range("C" & i).Value = "dm3" Then '判断单位,根据单位的不同,写入不同的公式
                Range("L" & i).Value = "=round(sum(" & gs & "),2)"
            ElseIf Range("C" & i).Value = "m3" Or Range("C" & i).Value = "kg" Or Range("C" & i).Value = "Kg" Then
                Range("L" & i).Value = "=round(sum(" & gs & "),1)"
            Else
                Range("C" & i).Interior.Color = vbRed
                Range("L" & i).Value = "=round(sum(" & gs & "),0)"
            End If 
            Range("L" & i).Interior.Color = vbRed '填充为红色
            i = s + 1
        Else '如果不是合并单元格,则下移一行
            i = i + 1
        End If
    Wend
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值