收支表 | ||||
日期 | 银行 | 金额 | ||
1 | 8月9日 | 工行 | 3000 | |
2 | 8月9日 | 农行 | -4000 | |
3 | 8月18日 | 建行 | 7000 | |
4 | 8月18日 | 中行 | 9000 | |
5 | 8月13日 | 农行 | -11000 | |
6 | 8月13日 | 招行 | 13000 | |
7 | 8月10日 | 中行 | -39000 | |
8 | 8月16日 | 农行 | -46000 | |
9 | 8月13日 | 建行 | 9000 | |
10 | 8月15日 | 中行 | -11000 | |
11 | 8月16日 | 农行 | 13000 |
任务要求一:通过数据透视表完成要求。
数据透视表的操作方法非常复杂,结果也不好美化。我觉得复杂过程可以通过编程简化。
Private Sub Button1_Click
Dim ws = (New excel).activesheet
‘上句ws获取当前表格中的activesheet对象
Dim arr = ws.Getgrid("B4:D14")
’arr数组获取到"B4:D14"的全部数据
Dim brr = New myxlsort(arr, 1).lstRecord
‘myxlsort(arr, 1)通过myxlsort自建通用排序类对arr的第1列进行默认升序排序,
’结果放在lstRecord中。brr通过赋值获得这个对象
这是lstRecord的定义,非常通用。
Public Structure myrecord
Public id As Integer‘这个表示行号
Public obj As Object ’这个表示值对象
End Structure
以下代码主要是从第24行,向各列输出数据。
Dim r = 24 '定义输出行
For i = 0 To brr.Count - 1
ws.Setcell(i + r, 1, brr(i).id)‘在第1列输出id行号
ws.Setcell(i + r, 2, brr(i).obj)’在第1列输出obj值对象
ws.Setcell(i + r, 3, arr(brr(i).id, 2)) ’在第3列输出arr(行号,2)第2列即“银行”
If arr(brr(i).id, 3) >= 0 Then 下面根据正负数来确定输出在哪一列,正数在4列,负数在5列
ws.Setcell(i + r, 4, arr(brr(i).id, 3))
Else
ws.Setcell(i + r, 5, arr(brr(i).id, 3))
End If
Next
这是全部主控程序代码。
上图就是结果。结果全部以数据方式直接呈现,可以再手工美化,应该会excel想搞多美化都行,比右上角系统自带简陋方式好看多了吧
其余的总计求和的东东,太简单,就不演示了。
结论:数据透视表只是方便了手工操作,针对完全不会编程的用户。
有编程能力的同学完全不需要学习,尝试去编程一键实现N步操作才能实现的复杂也很有意思。