巧用公式實現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的各種技能,纔是最高境界。

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