分享

VBA中数组的写入!

 L罗乐 2018-02-21


前面一节我们学习了如何把Excel中的数据读取到VBA数组中,那数组中的元素在参与运算后会得出符合条件的值,我们希望能用一个新的数组把这些值给装进去,这就是数组的写入。


我们先来看个例子:



按照上一节中思路,我们先把这三列数据读取到一个数组中,然后判断办事处是否为二办,如果相等,那就计数,销量累加,全部判断结束以后,累加的结果就是总销量,总销量除以计数结果就是平均销量。


那么我们能不能在判断等于二办之后,把销量的值给写到一个新的数组里,全部判断完毕,就会得到一个新数组,求这个数组的和就是总销量了。


上面这种思路,就是要把数组参与运算后得到的结果写入一个新的数组中去,该案例的

代码如下:

Sub test()

Dim arr1, arr2(1 To 15), i%, n%

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

'先把数据读取到数组arr1中去

For i = 1 To Range('a2', [c2].End(xlDown)).Rows.Count

    If arr1(i, 1) = '二办' Then arr2(i) = arr1(i, 3): n = n 1

    '假如符合条件,就把该数组中第三个值写入新的数组arr2中去,同时计数

Next

MsgBox '二办的总销量为' & WorksheetFunction.Sum(arr2) _

                & '二办的平均销量为' & WorksheetFunction.Sum(arr2) / n

End Sub



上面这段代码中还有两个以前没提到过的知识点:


1、if判断语句,如果只有一种情况,那可以写在一行,不用end if 来结束,同时then后,如果有多个需要执行的语句,中间要用冒号隔开。


2、写代码时如果代码太长了想写到下一行去,先敲空格,在敲下划线,然后回车。


上面代码中,我们是先声明了一个1 to 15 的数组用于装判断后得到的结果,得到的新数组如下(可通过本地窗口看到):



那如何才能让这些数值排列在一起,空值排列在一起呢?


代码如下:

Sub test1()

Dim arr1, arr2(1 To 15), i%, n%

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

For i = 1 To Range('a2', [c2].End(xlDown)).Rows.Count

    If arr1(i, 1) = '二办' Then n = n 1: arr2(n) = arr1(i, 3)

Next

MsgBox '二办的总销量为' & WorksheetFunction.Sum(arr2) _

                & Chr(13) & '二办的平均销量为' & WorksheetFunction.Sum(arr2) / n

End Sub


数组arr2的行用n来控制,这样就可以让数字排列在一起。


细心的同学会发现两段代码最后msgbox后跟的代码有区别:


第一段代码最终结果是:



第二段代码得到的结果是:



所以VBA中chr(13)的作用是换行。



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多