经常有人反复告诫新手:千万不要使用合并单元格。
为什么有这种警告呢,其实合并单元格是Excel中非常好用的一个功能,但它对操作用户(使用菜单按钮命令的用户)和公式用户(使用公式来计算的用户)不太友好。
一旦使用了合并单元格,在使用菜单和公式的时,excel经常会弹出窗口提示,不支持合并单元格。
今天我用vb代码设计了演示程序,来完成合并单元格最让人头疼的几个地方。
第一关,合并单元格的读取载入。
这是个典型的包含合并单元格的加班费计算表格,读取载入后如下图
核心代码:读取ws表格的指定内容到窗体表格界面
Private Sub 载入_Click()
gr.setsheet 1
Set ws = excel.sheets(1)
loadarray ws, 1, 1, ws.maxrow(2), ws.maxcolumn(1)
End Sub
第二关:计算加班费:
第三关:分组汇总:
核心代码:
Private Sub 载入_Click()
gr.setsheet 1
Set ws = excel.sheets(1)
loadarray ws, 1, 1, ws.maxrow(2), ws.maxcolumn(1)
End Sub
Private Sub 统计_Click()
Set ws = excel.sheets(1)
Dim i, t, r
ws.cells(1, "F") = "加班费"
For r = 2 To ws.maxrow(2)
t = ws.cells(r, "C") * ws.cells(r, "D") * ws.cells(r, "E")
ws.cells(r, "F") = t
Next
载入_Click
End Sub
Private Sub 汇总_Click()
Set ws = excel.sheets(1)
ws.cells(1, "G") = "分公司汇总"
Dim sz() As Long, r, c, r2, t
c = 1
r = 2
r2 = ws.maxrow(2)
Do
If ws.isMergeCell(r, c) Then
sz = ws.getmergerange(r, c)
ws.cells(r, "G") = total(r, sz(3))
r = sz(3)
Else
ws.cells(r, "G") = ws.cells(r, "F")
End If
r = r + 1
If r > r2 Then
Exit Do
End If
Loop
载入_Click
End Sub