巧用公式实现VBA数组快速赋值

VBA中可以使用数组处理工作表中的数据,是个尽人皆知的秘密了,读取数据加载到数组中也很简单。
工作表中数据如下图所示,需要将B1:G1的内容加载到数组中。
在这里插入图片描述
哒哒,一行代码瞬间生成一个二维数组,不要问为什么是二维数组?为什么使用方括号?如果真的对这两点有疑问,请自行爬楼翻翻我以前的博文,都有详细讲解。

Sub Demo1()
    arr = [B1:G1]
End Sub

可是某些英明(奇葩 )的领导非要这样的格式,完全不知道这是为了个毛呀!?
在这里插入图片描述
这个该如何弄到一个数组中呢,先分别读入数组,然后再使用动态数组就和合并成2x3的数组了。

Sub Demo2()
    Dim crr(1 To 2, 1 To 3)
    arr = [B1:D1]
    brr = [E2:G2]
    For i = 1 To 3
        crr(1, i) = arr(1, i)
        crr(2, i) = brr(1, i)
    Next
End Sub

有些不甘心,这么简单的一个事情,要这么多行代码。千万不要忘记,我们是在用Excel中玩儿VBA,Excel中强大的公式可以把这个简化为一行代码就能实现。
啥也别说了,直接上代码。

Sub Demo3()
    arr = [Choose({1;2},B1:D1,E2:G2)]
    brr = [if({1;0},B1:D1,E2:G2)]
End Sub

【代码解析】
两行代码都可以实现一次性加载到2x3数组中,实现思路是相同的,只是使用的公式不同。
Choose函数根据指定的索引值,从参数串中选择值。此处的参数是两个单元格区域,这样就分两次分别选中了B1:D1和E2:G2单元格区域。
工作表中的If函数将不用解释了,这里需要注意的是,数组{1;0}两个数字的顺序和后面单元格区域的顺序要正确匹配。


看似旁门左道,其实是超级敏捷的实现方式,综合使用Excel的各种技能,才是最高境界。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章