分享

带您走进VBA数组7

 yuxinrong 2018-12-10
数组里常用的函数

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多