专业微软培训机构,为北京、上海、广州、深圳、长沙、武汉、福州、厦门、泉州、漳州等城市提供EXCEL、PPT、WORD、ACCESS、PROJECT、MCSE、MCITP、OFFICE等高级培训及相关技术服务。

0592-2962798 2963798
2966798 2968798
厦门市厦禾路南洋大厦二楼

最新文章列表

高士达平台设计开发的泰欣订单管理系..

EXCEL一键实现报关单据生成

[EXCEL]高手都是这么写公式的

快速将EXCEL表中的内容缩放至一页进..

建发汽车干部考核系统实现方案

金牌OFFICE老师刘凌峰教你利用VBA调..

热门文章列表

如何解决EXCEL运行速度慢的问题

利用EXCEL VBA向WORD生成表格和图表..

【高士达下载】高士达工具箱

瑞声达模具管理系统顺利升级到WINDO..

【课程】深入挖掘EXCEL函数宝藏

利用VLOOKUP提取多个条件的同一结果..

金牌OFFICE老师刘凌峰教你利用VBA调整转换报表方向

关键字:EXCEL VBA,EXCEL培训    发布时间:2015-11-24 19:04:26    作者:admin

问题背景:

某日,有学员请教从系统中导出海量的员工调薪记录,如何快速生成一份调薪报表。我认真观察了其数据,认为这是将竖向报表转换为横向报表的一个典型例子,通过函数的办法比较难实现,利用VBA则迅速完成。

原始表格:

  上表是通过人力资源管理系统导出的调薪记录,数据量非常大,达到几千条。每位员工可能只有一条调薪记录,也可能有多条调薪记录。调整的次数和调整的时间均不确定。

目标报表:

         如上图所示,用户希望生成一张按员工姓名为基准的不重复行报表。即通过重复列的方式减少重复行的数据。

         不仅需要将调薪记录中的所有记录连接成一行的数据,还需将最后一次调薪的数据记录下来。

VBA代码:

Sub 调整报表()

k = 2

For i = 3 To Application.WorksheetFunction.CountA(Range("a1:a2000"))

myname = Sheet1.Cells(i, 1)

For n = k To 1000

tname = Sheet2.Cells(n, 1)

If myname = tname Then

Sheet1.Cells(i, 6 + c) = Sheet2.Cells(k, 2)

Sheet1.Cells(i, 7 + c) = Sheet2.Cells(k, 3)

Sheet1.Cells(i, 8 + c) = Sheet2.Cells(k, 4)

Sheet1.Cells(i, 9 + c) = Sheet2.Cells(k, 5)

Sheet1.Cells(i, 10 + c) = Sheet2.Cells(k, 6)

Sheet1.Cells(i, 11 + c) = Sheet2.Cells(k, 7)

c = c + 6

k = k + 1

Else

Sheet1.Cells(i, 2) = Sheet2.Cells(k - 1, 2)

Sheet1.Cells(i, 3) = Sheet2.Cells(k - 1, 3)

Sheet1.Cells(i, 4) = Sheet2.Cells(k - 1, 4)

Sheet1.Cells(i, 5) = Sheet2.Cells(k - 1, 5)

c = 0

Exit For

End If

Next n

Next i

End Sub

通过两次循环,将数据快速按指定方式生成报表。

总结:

         EXCEL不是万能的,没有EXCEL是万万不能的。如果需要稍微复杂一点的功能,还是离不开VBA的协助。

         也许你并不需要此功能,但如果你在EXCEL使用方面碰到任何问题,欢迎联系我。

     下载案例源文件请联系:0592-2967000

本文关键词:EXCEL VBA   EXCEL培训   

厦门高士达是一家微软认证培训机构,是专业的EXCEL培训、PPT培训、ACCESS培训、OFFICE培训、微软培训、微软考试及其他IT服务供应商 ©2014 厦门高士达微软高级技术教育中心   闽ICP备14021819号 技术支持:港湾有巢

闽公网安备 35020302001653号