收支表


日期

银行

金额


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步操作才能实现的复杂也很有意思。