VBA基础讲解|单列数据转换成多列数据!

论坛 期权论坛 期权     
Excel函数编程及可视化   2019-7-27 14:44   2218   0
点击蓝字关注我们
昨天在处理一份销售数据的时候遇到一个小问题,经过思索,编写个VBA解决了问题,特此将过程分享给大家,共勉!


需求是这样的,下图中A列为省份名称,B列为城市名称,一个省份对应多个城市:



现在需要将图1中的数据转换成下图中的样式,表头第一行为省份,底下各行依次为各省份对应的城市:



本想着用数据透视表直接透视的,将省份直接拖到列标签,城市拖到值区域,但透视表不支持文本展示,故行不通;


用函数公式肯定是可以解决的,后面写过几个公式,太过麻烦,且需要对每个省份写个公式,故放弃;





想想用VBA挺简单的,故打算用VBA解决,下面说说具体的思路。



思路



1、先将插页1中的省份删重,得到所有省份,并将这些省份选择性粘贴转置到插页2中的第一行,这样表头就制作好了;


2 、选定插页二中的一个省份,比如第一个省份,A1单元格,在通过VBA循环插页1中A列的每个单元格,如果当前单元格等于插页2中的A1单元格,则将当前单元格右边的单元格城市名填写到插页2 A1省份的下面,依次循环,直至遍历完A列,将所有的城市填写到插页2 A1省份下面;


3、上面通过一个循环完成了一个省份城市的查找,现在只需要在插入一个循环,遍历所有省份即可,即遍历插页2省份行,就可以将所有省份下面的城市填写完整。


省份表头制作



插页1省份列删重—复制—插页2 A1单元格选择性粘贴—转置,完成!





代码



输入以下代码:



代码文字明细:


Sub 两列转多列()
Dim i%, j%, a%
For i = 1 To 31
a = 2
For j = 2 To 598
If Worksheets("Sheet2").Cells(1, i) = Worksheets("Sheet1").Cells(j, 1) Then
Worksheets("Sheet2").Cells(a, i) = Worksheets("Sheet1").Cells(j, 2)
a = a + 1
End If
Next
Next
End Sub



主要运用到两个for循环和一个if判断语句,三个参数,第一个参数i是控制省份循环,第二个参数a是控制城市填列位置,第三个参数j是控制插页1A列循环,比较基础,小伙伴可以结合思路看看,就很容易理解啦~


小结


这里通过工作中的一个小问题,介绍问题的解决方法以及编程思路,分享给大家,希望有所帮助,如果你有更简介的办法,欢迎留言讨论!


如果觉得有用,欢迎关注我,定期分享数据小技巧!

Excel函数编程及可视化
微信号:data_skill


每天进步一点点~
长按二维码关注
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:10
帖子:2
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP