一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - VBA - VBA數組用法案例詳解

VBA數組用法案例詳解

2021-10-16 14:55天涯海角路 VBA

這篇文章主要介紹了VBA數組用法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下

前言

VBA數組在Excel開發應用中,作用還是很明顯的,用好數組可以提高工作效率,下面就開始揭開VBA數組的神秘面紗。

具體操作

1、VBA數組的定義方法

下面是幾種數組常用的定義方法,一維數組的定義、二維數組的定義

直接賦值定義、調用Array函數定義、調用Excel工作表內存數組

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
''''''''''''直接定義給數組賦值
'一維常量數組的定義
Sub arrDemo1()
Dim arr(2) As Variant   '數組
arr(0) = "vba"
arr(1) = 100
arr(2) = 3.14
MsgBox arr(0)
End Sub
 
'二維常量數組的定義
Sub arrDemo2()
Dim arr(1, 1) As Variant  'Dim arr(0 To 1, 0 To 1) As Variant
arr(0, 0) = "apple"
arr(0, 1) = "banana"
arr(1, 0) = "pear"
arr(1, 1) = "grape"
For i = 0 To 1
    For j = 0 To 1
        MsgBox arr(i, j)
    Next
Next
End Sub
 
''''''''''''用array函數創建常量數組
'一維數組
Sub arrayDemo3()
Dim arr As Variant   '數組
arr = Array("vba", 100, 3.14)
MsgBox arr(0)
End Sub
 
'二維數組
Sub arrayDemo4()
Dim arr As Variant   '數組
arr = Array(Array("張三", 100), Array("李四", 76), Array("王五", 80))
MsgBox arr(1)(1)
End Sub
 
'調用Excel工作表內存數組
' 一維數組[{"A",1,"C"}]
'二維數組[{"a",10;"b",20;"c",30}]
Sub mylook()
Dim arr
arr = [{"a",10;"b",20;"c",30}]
Range("a1:b3") = arr
MsgBox Application.WorksheetFunction.VLookup("b", arr, 2, 0)  '調用vlookup時可以作為第二個參數
End Sub
 
'動態數組的定義方法
Sub arrDemo5()
Dim arr1() '聲明一個動態數組(動態指不固定大小)
Dim arr2  '聲明一個Variant類型的變量
 
arr1 = Range("a1:b2")   '把單元格區域A1:B2的值裝入數組arr1
arr2 = Range("a1:b2")   '把單元格區域A1:B2的值裝入數組arr2
 
MsgBox arr1(1, 1)  '讀取arr數組中第1行第1列的數值
MsgBox arr2(2, 2) '讀取arr1數組的第2行第2列的數值
End Sub

2、數組的賦值和計算

?
1
2
3
4
5
6
7
8
9
10
'讀取單元格數據到數組,進行計算,再賦值給單元格
Sub arr_calculate()
Dim arr     '聲明一個變量用來盛放單元格數據
Dim i%
arr = Range("a2:d5")     '把單元格數據搬入到arr里,它有4列4行
For i = 1 To 4     '通過循環在arr數組中循環
    arr(i, 4) = arr(i, 3) * arr(i, 2)      '數組的第4列(金額)=第3列*第2例
Next i
Range("a2:d5") = arr     '把數組放回到單元格中
End Sub

3、數組的合并(join)與拆分(split)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
'數組合并(join)與拆分(Split)
Sub join_demo()
Dim a As Variant
Dim b As Variant
  ' Join using spaces
a = Array("Red", "Blue", "Yellow")
b = Join(a, "")
MsgBox ("The value of b is :" & b) 'Red Bule Yellow
 
' Join using $
b = Join(a, "$")                   'Red$Bule$Yellow
MsgBox ("The Join result after using delimiter is : " & b)
End Sub
 
Sub split_demo()
Dim a As Variant
Dim b As Variant
 a = Split("Red$Blue$Yellow", "$")     'a = Array("red","blue","yellow")
 b = UBound(a)
 For i = 0 To b
    MsgBox a(i)
 Next
End Sub

4、數組的篩選(Filter)

?
1
2
3
4
5
6
7
'vba數組的篩選
Sub arr_filter()
arr = Array("ABC", "F", "D", "CA", "ER")
arr1 = VBA.Filter(arr, "A", True) '篩選所有含A的數值組成一個新數組
arr2 = VBA.Filter(arr, "A", False) '篩選所有不含A的數值組成一個新數組
MsgBox Join(arr1, ",") '查看篩選的結果
End Sub

5、數組維度的轉換(Transpose)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
'數組維數的轉換
 
'一維轉二維
Sub arr_tranpose1()
arr = Array(10, "vba", 2, "b", 3)
arr1 = Application.Transpose(arr)
MsgBox arr1(2, 1) '轉換后的數組是1列多行的二維數組
End Sub
 
'二維數組轉一維 '注意:在轉置時只有1列N行的數組才能直接轉置成一維數組
Sub arr_tranpose2()
arr2 = Range("A1:B5")
arr3 = Application.Transpose(Application.Index(arr2, , 2)) '取得arr2第2列數據并轉置成1維數組
MsgBox arr3(4)
End Sub
 
'把單元格中的內容用“-”連接起來
Sub join_transpose_demo()
arr = Range("A1:C1")
arr1 = Range("A1:A5")
MsgBox Join(Application.Transpose(Application.Transpose(arr)), "-")
MsgBox Join(Application.Transpose(arr1), "-")
End Sub

6、利用數組獲取所有工作表名稱的自定義函數

?
1
2
3
4
5
6
7
8
9
10
'利用數組獲取所有工作表名稱的自定義函數
Function getSheetsname(id)
Dim i%, arr()
k = Sheets.Count
ReDim arr(1 To k)
For i = 1 To k
    arr(i) = Sheets(i).Name
Next
getSheetsname = Application.Index(arr, id)
End Function

7、數組賦值,提高計算效率

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
'數組賦值,提高計算效率
'2.03秒
Sub dataInput()
Dim start As Double
start = Timer
Dim i&
For i = 1 To 30000
    Cells(i, 1) = i
Next
MsgBox "程序運行時間為" & Format(Timer - start, "0.00") & "秒"
End Sub
 
'0.12秒
Sub dataInputArr()
Dim start As Double
start = Timer
Dim i&, arr(1 To 30000) As String
For i = 1 To 30000
    arr(i) = i
Next
Range("a1:a30000").Value = Application.Transpose(arr)
MsgBox "程序運行時間為" & Format(Timer - start, "0.00") & "秒"
End Sub
 
'0.09秒
Sub dataInputArr2()
Dim start As Double
start = Timer
Dim i&, arr(1 To 30000, 1 To 1) As String
For i = 1 To 30000
    arr(i, 1) = i
Next
Range("a1:a30000").Value = arr
MsgBox "程序運行時間為" & Format(Timer - start, "0.00") & "秒"
End Sub

總結

VBA數組還是很強大的,通過對單元格區域數據的讀取,賦值給數組,再利用數組函數或者調用Excel內置函數進行相關處理。另外,數組在賦值計算效率上面也是非常高的,大家可以自行嘗試下。

到此這篇關于VBA數組用法案例詳解的文章就介紹到這了,更多相關VBA數組用法內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产乱码免费卡1卡二卡3卡四 | 丝瓜草莓香蕉绿巨人幸福宝 | 欧美一级在线播放 | 亚洲国产精品一区二区久久 | 日韩欧美一区二区三区免费观看 | 学校女性奴sm训练调教 | 日本粉色视频 | 女子监狱第二季在线观看免费完整版 | 12一14性xxxxx国外 | 三级理论在线播放大全 | 美女脱了内裤打开腿让人羞羞软件 | 成人午夜爽爽爽免费视频 | 福利入口在线观看 | 亚洲欧美日韩国产一区二区精品 | 天天色综合6| 美女被的在线网站91 | 深夜免费网站 | 国产农村乱子伦精品视频 | 四虎网址在线 | 999热这里全都是精品 | tkvk视频| 国产精品毛片无码 | 9re视频这里只有精品 | 成人免费网站视频ww | 青青草原国产一区二区 | julia ann一hd| 午夜福利合集1000在线 | 狠狠色婷婷 | 韩国甜性涩爱在线播放 | 国产一区二区三区在线看 | 成人动漫在线免费看 | 色亚洲视频 | 日韩一区二区不卡 | 久久青青草原综合伊人 | 亚洲欧美日韩久久一区 | 91在线 在线播放 | 1769在线观看 | 成人性爱视频在线观看 | 欧美激情精品久久久久久不卡 | 91亚洲精品久久91综合 | 国产91页 |