有如下這樣一個變態的表格。我們需要在右邊紅色的單元格中計算出左邊的數據的和。這個求和的變態之處在于左邊的數據可能有1行,兩行,甚至是10幾行。Boss要求的是既要求和,還要根據單位的不同保留不同的小數位數。最要命的是,這個表格很大,如果手工做的話,可能沒做完就要吐血身亡了。
變態圖片
不如用VBA試試吧。我實在是不想手工做,看起來就頭暈。
首先分析一下表格的規律:
- 求和的項都是合并的單元格(3個合并單元格)。例如2-7行的“挖土石方”。
- 要求和的數據都是只有一行或者是每隔兩行有一組數據(例如第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