打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
条条大道通罗马,VBA中数组实例练习!


VBA数组部分已经讲完了,前几天正好看到有群友提问的一道题目:



把左边的数据转化成右边的数据。


我们先来看下如何用VBA解决这个题目,思路如下:

1、把左边的数据读取到一个数组arr1中,arr1就是一个14行,6列的数组(

不包含标题行),arr1(1 to 14,1 to 6)

2、声明一个新的数组arr2,用来装想要的结果。我们知道,想要的结果只有3列,行数由姓名的个数决定,有多少个姓名就有多少行,所以对姓名区域非空单元格进行计数即可知道arr2应该有多少行,如果不想麻烦,也可以把arr2的行数写的大点,足够容下这些姓名即可,自己估计下就知道了。

3、arr2的第一个、第二个元素跟arr1中的第一列、第二列对应,第三个元素由arr1中的第三列到第六列中的元素决定。做两个循环,一个循环arr1的行数,一个循环每行的3到6列,把循环出来的值一个个写到arr2中去。

4、写入完成后对新的数据区域第一列和第二列的数据中单元格内容相同的数据进行合并。


具体代码如下:

Sub test()

Dim i%, n%, m%, h%, k%, arr1, arr2()

h = Application.CountA(Range('c2:f15'))

arr1 = Range('a2', [a2].End(xlDown)(1, 6))

ReDim arr2(1 To h, 1 To 3)

For i = 1 To UBound(arr1)

        For n = 3 To UBound(arr1, 2)

                If arr1(i, n) <> '' Then

                m = m 1

                arr2(m, 1) = arr1(i, 1)

                arr2(m, 2) = arr1(i, 2)

                arr2(m, 3) = arr1(i, n)

                End If

        Next

Next

[h1:j1] = Array('大区', '部门', '姓名')

[h2].Resize(h, 3) = arr2


Application.DisplayAlerts = False

For k = h 1 To 1 Step -1

If Cells(k, 8).Value = Cells(k 1, 8).Value Then

Cells(k, 8).Resize(2, 1).Merge

End If

If Cells(k, 9).Value = Cells(k 1, 9).Value Then

Cells(k, 9).Resize(2, 1).Merge

End If

Next

Application.DisplayAlerts = True

End Sub


效果如下:



以上这个例子,可以很好的练习数组部分讲的知识,大家可以对照练习下。


当然,条条大道通罗马,我们看下另外一种办法,也很快,而且都是很基础的操作。


1、先把数据整理下,把姓名整理到一列,整理用的是循环引用的技巧,很值得学习。



2、把公式去掉,多余的姓名列删除,进行筛选,把姓名为0的行删除掉(当然0值不删除,直接透视后在透视表中处理也可以)。




3、数据透视



简单的三步就可以达到你想要的效果。


今天的分享就到这里了!


视频教程正在陆续录制中,进入公众号后台菜单中可了解详情!


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
带您走进VBA数组7
VBA数组
Excel中字典应用综合示例
给学习Excel VBA数组的人,一点点自己学习的心得
Excel VBA 9.4 数组写入excel的方法和技巧
Excel VBA工作薄 5.1 按照单元格内容批量创建工作薄 我让你10秒
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服