美文网首页
使用VBA数组公式

使用VBA数组公式

作者: A_rrow | 来源:发表于2019-07-25 09:44 被阅读0次

    1. 数组的好处

    ①可作为辅助列,临时存放数值
    ②大大加快运算的效率

    2. 如何定义数组

    dim arr()

    3. 动态数组和静态数组

    动态数组指大小不固定,可将区域直接赋值进去
    静态数组指数组固定大小,即Dim arr(1 to 5)

    4. 计算数组大小

    Ubound(arr) -- 返回数组的上限
    Lbound(arr) -- 返回数组的下限

    5. 重新定义数组大小

    ReDim

    6. 将区域赋值给数组

    arr = range("a1:a5")

    7. 数组的取值

    range("a1") = Arr(行,列)

    7. 数组的维度


    1. 一维数组 -- 赋值给以数组时,数组的范围要先定义好
    Dim arr(1 To 4)
    arr(1) = "张三"
    arr(2) = "李四"
    arr(3) = "王五"
    '将某个值输出到单元格'
    range("a1") = arr(2)
    '将一维数组中的所有值输出到单元格区域'
    Range("a7:d7") = arr
    

    1. 二维数组的赋值和输出
    Dim arr(1 To 4, 1 To 2)
    arr(1, 1) = "张三"
    arr(1, 2) = 30
    arr(2, 1) = "李四"
    arr(2, 2) = 35
    arr(3, 1) = "王五"
    arr(3, 2) = 40
    '输出到单元格区域'
    Range("a15:b17") = arr
    

    Sub test()
    '静态数组,范围固定好了'
    Dim arr(1 To 4)
    arr(1) = "张三"
    arr(2) = "李四"
    arr(3) = "王五"
    '数组的取值'
    range("b1") = arr(2)
    End Sub
    

    将区域赋值给数组时数组就会变成二维的

    dim arr()
    '将区域赋值给数组'
    arr = range("a1:a5")
    '取值时带上行列'
    range("c1") = arr(2,1)
    

    数组可作为临时存放变量的空间

    Dim arr()
    Dim j, i As Integer
    j = Range("a65536").End(xlUp).Row - 1
    '定义数组时必须要用常量,所以待i为常量时再重新定义数组'
    '此时是动态数组'
    ReDim arr(1 To j)
    For i = 1 To j
        arr(i) = Range("b" & i + 1) * Range("c" & i + 1)
    Next
    '取数组中最大的那个值'
    Range("h3") = Application.WorksheetFunction.Max(arr)
    '找出销售额最高的产品'
    Range("h2") = Range("a" & Application.WorksheetFunction.Match(Range("h3"), arr, 0) + 1)
    

    可借助数组提高代码的执行效率

    Ag

    不用数组的做法


    Sub t()
    Dim i, k, t
    t = Timer
    For i = 2 To 200000
        If Range("g" & i) = Range("n5") Then
            k = k + Range("j" & i)
        End If
    Next
    Range("o5") = k
    MsgBox Timer - t
    End Sub
    

    最终运行所需的时间为3.1秒左右

    使用数组的做法

    Sub t()
    
    Dim i, k
    Dim t
    Dim str As String
    Dim arr()
    
    t = Timer
    
    arr = Range("g1:j200000")
    str = Range("n5")
    For i = 2 To 200000
        '注意数组取值的写法'
        If arr(i, 1) = str Then
            k = k + arr(i, 4)
        End If
    Next
    
    Range("o5") = k
    MsgBox Timer - t
    
    End Sub
    

    最终运行的所需时间为0.3秒
    两者都只是在只有一个条件下的循环,若增加条件时间相差会更为明显

    相关文章

      网友评论

          本文标题:使用VBA数组公式

          本文链接:https://www.haomeiwen.com/subject/ughqrctx.html