⼆维数组提取_VBA学习笔记22:数组4
学习资源:《Excel VBA从⼊门到进阶》第23集 by兰⾊幻想
⼀、数组的处理
1. 数组的最值
求最⼤值:Application.Max(数组)
求最⼩值:Application.Min(数组)
求第⼏⼤值:Application.Large(数组, ⼏)
求第⼏⼩值:Application.Small(数组, ⼏)
Sub s()
Dim arr1()
vba自学好学吗arr1 = Array(1, 12, 4, 5, 19)
MsgBox "1, 12, 4, 5, 19最⼤值" & Application.Max(arr1)
MsgBox "1, 12, 4, 5, 19最⼩值:" & Application.Min(arr1)
MsgBox "1, 12, 4, 5, 19第⼆⼤值:" & Application.Large(arr1, 2)
MsgBox "1, 12, 4, 5, 19第⼆⼩值:" & Application.Small(arr1, 2)
End Sub
2. 求和
application.Sum (数组)
3. 统计个数
统计VBA数组的数字个数:Application.Count(数组)
统计VBA数组已填充内容的个数:Application.CountA(数组)
Sub s1()
Dim arr1, arr2(0 To 10), x
arr1 = Array("a", "3", "", 4, 6)
For x = 0 To 4
arr2(x) = arr1(x)
Next x
MsgBox "数组1的数字个数:" & Application.Count(arr2)
MsgBox "数组2的已填充数值的个数" & Application.CountA(arr2)
End Sub
得出的結果是:
数组1的数字个数:2
数组2的已填充数值的个数:11(空值也被计算进去了)
3. 在数组⾥查
Application.Match((lookup_value, lookup_array, [match_type]))
Sub s2()
Dim arr
On Error Resume Next
arr = Array("a", "c", "b", "f", "d")
MsgBox Application.Match("f", arr, 0)
If Err.Number = 13 Then
MsgBox "查不到"
End If
End Sub
⼆、可⽣成数组的函数
1、split函数
按分隔符把字符串截取成VBA数组,该数组是⼀维数组,编号从0开始。
split(字符串,分隔符)
Sub t1()
Dim sr, arr
sr = "A-BC-FGR-H"
arr = VBA.Split(sr, "-")
MsgBox Join(arr, ",")
End Sub
运⾏结果显⽰
2、Filter函数
按条件筛选符合条件的值组成⼀个新的数组。
Filter(数组,筛选条件,是/否)
注:如果是(true)则返回包含的数组,如果否则返回⾮包含的数组例:把型号⾥含W和不含W的字符串分别提取出来,放在B列和C列。
Sub t2()
Dim arr, arr1, arr2
'先把数据转换为⼀维数组
arr = Application.Transpose(Range("A2:A10"))
arr1 = VBA.Filter(arr, "W", True)
arr2 = VBA.Filter(arr, "W", False)
'Transpose只能把只有⼀列的⼆维数组转换为⼀维数组
Range("B2").Resize(UBound(arr1) + 1) = Application.Transpose(arr1) Range("C2").Resize(UBound(arr2) + 1) = Application.Transpose(arr2)
End Sub
結果展⽰
3、index函数
调⽤该⼯作表函数可以把⼆维数组的某⼀列或某⼀⾏截取出来,构成⼀个新的数组。
Application.Index(⼆维数组,0,列数)) → 返回⼆维数组
Application.Index(⼆维数组,⾏数,0)) → 返回⼀维数组
例:把A2:D6的第⼀列写⼊arr1,第四⾏写⼊arr2。
Sub t3()
Dim arr, arr1, arr2
arr = Range("A2:D6")
arr1 = Application.Index(arr, , 1)
arr2 = Application.Index(arr, 4, 0)
End Sub
运⾏结果:
arr1
arr2
4、Vlookup函数
Vlookup函数的第⼀个参数可以⽤VBA数组,返回的也是⼀个VBA数组。
例:在下表产品BC的⾦额。
Sub t4()
Dim arr, arr1
arr = Range("a2:d6")
arr1 = Application.VLookup(Array("B", "C"), arr, 4, 0)
End Sub
vlookup到指定字符就会停⽌寻,所以只返回两个值。
5、 Sumif函数和Countif函数
Countif和sumif函数的第⼆个参数都可以使⽤数组,所以也可以返回⼀个VBA数组,如:例:分别计算下表产品BCGR的合计⾦额。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。