数组里常用的函数 1.LBound 取得数组的上标
这个用的比较少,因为上标默认的是0和1
2.Ubound取得数组的下标 这个函数很多,不过大家要注意 对一维数组来说,只有一个下标 如 ubound(arr1)和ubound(arr1,1)是一样的 而对二维数组来说,就有二个下标了.一个是行,也就是说一维的下标,一个是列,是二维的下标 一维上的下标 ubound(arr1)和Ubound(arr1,1) 是一样的,而二维上的下标 Ubound(arr1,2)
3.Split:按照某一字符串拆分成一个一维数组,且上标从0开始
Sub Split的用法1() 'Split生成数组是一维的,且最小索引是从0开始的 Dim arr1 arr1 = VBA.Split(Range("A1"), ",") [C1].Resize(1, UBound(arr1, 1) + 1) = arr1 '为什么要加1,因为最小上标是从0开始,所以加1 End Sub Sub Split的用法2() 'Split生成数组是一维的,且最小索引是从0开始的 Dim arr1 arr1 = VBA.Split(Range("A1"), ",") [C3].Resize(UBound(arr1, 1) + 1, 1) = Application.WorksheetFunction.Transpose(arr1) '为什么要加1,因为最小上标是从0开始,所以加1 End Sub
4.Join:按照某一字符串把一个一维数组合并成一串字符
Option Explicit Sub Jion的用法1() '大家记得函数Jion第一参数的数组只能是一维的 Dim MaxRow%, arr1, arr2 MaxRow = Cells(Rows.Count, 1).End(xlUp).Row arr1 = Range("A1:A" & MaxRow) arr2 = Application.WorksheetFunction.Transpose(arr1) [B1] = VBA.Join(arr2, ",") End Sub Sub Jion的用法2() Dim MaxColumn%, arr1, arr2, arr3 MaxColumn = Cells(1, Columns.Count).End(xlToLeft).Column arr1 = Range(Cells(1, 1), Cells(1, MaxColumn)) ' arr2 = Application.WorksheetFunction.Transpose(arr1)’把二维的横向转为二维纵向数组 ' arr3 = Application.WorksheetFunction.Transpose(arr2)’再把二维的纵向数组转为一维的横向数组 arr3 = Application.Transpose(Application.Transpose(arr1)) '可以省略WorksheetFunction [AB2] = VBA.Join(arr3, "") End Sub
5.InStr.找到一个字符串在另一字串中的位置,有点像工作簿函数的Find函数,它比Find函数还好用,因为它如果找不出就返回0,不会报错 Sub Instr的用法() 'InStr相当于工作表内置函数Find 'VBA.InStr(从要那一串字符串中找,要找的字符串 '作用是返加这个要找的字符串在那一串字符串的位置 '如果找不到就返回0 Dim arr1, arr2(1 To 100, 1 To 2), x%, k% arr1 = Sheets(6).UsedRange Range("D1:F1048576") = "" For x = 2 To UBound(arr1, 1) If VBA.InStr(arr1(x, 1), "李") <> 0 Then k = k + 1 arr2(k, 1) = arr1(x, 1) arr2(k, 2) = arr1(x, 2) End If Next x [D1:E1] = Array("名称", "数量") [D2].Resize(k, 2) = arr2 End Sub '总结一下,InStr函数方便一些,不用转一维 6.InStrRev和I民InStr相反,默认找到一个,而InStrRev找最后一个
Sub InStrRev用法() '从st里提取工作簿名称 Dim st$, x% st = "E:\桌面\VBA入门进阶36讲视频\X第二十四讲数组实战二\数组.xls" x = InStrRev(st, "\") '找到最后一个"\" 的位置 MsgBox Right(st, Len(st) - x) End Sub
7.Filter:从一个一维数组中筛选满足条件的
Sub Filter的用法() Dim MaxRow%, arr1, arr2, arr3 MaxRow = Cells(Rows.Count, 1).End(xlUp).Row arr1 = Range("A2:A" & MaxRow) arr2 = Application.WorksheetFunction.Transpose(arr1) arr3 = VBA.Filter(arr2, "李", True) '如果你筛选不包含“李”字的,那么就把True改为False [C1] = "名称" [C2].Resize(UBound(arr3, 1) + 1, 1) = Application.WorksheetFunction.Transpose(arr3) End Sub
8.调用工作表内置函数Index
Sub Index的用法() Dim MaxRow&, arr1, x% MaxRow = Cells(Rows.Count, 1).End(xlUp).Row arr1 = Range("A2:E" & MaxRow) For x = 1 To UBound(arr1, 1) If arr1(x, 4) < 2000 Then arr1(x, 5) = "偏低" End If Next x [E1] = "备注" '这里注意一下,以后我们在学函数时,Index第二参数可以省略,在VBA里大家要用0,不能省略,省略会报错 [E2].Resize(UBound(arr1, 1), 1) = Application.WorksheetFunction.Index(arr1, 0, 5) End Sub
|