• 【VBA研究】怎样将单元格数据赋给数组


    作者:iamlaosong

    将工作表中的数据赋给数组或者将数组的数据赋给工作表,一般有两种。一种是循环的方法,一个一个的传,这样的方法一般用于须要对每一个数据特别处理的场合,还有一种是一次性用赋值语句传,就速度来说,另外一种方法要快得多。看以下例程:

    Sub tt()
        Dim arr1(240000, 4)
        Dim arr2()
        
        lineno = [A1048576].End(xlUp).Row      '行数
        '循环给数组赋值。数组myarr必须先定义大小
        t1 = Now()
        For i = 3 To lineno
            k = i - 2
            arr1(k, 1) = Cells(i, 1)
            arr1(k, 2) = Cells(i, 2)
            arr1(k, 3) = Cells(i, 3)
            arr1(k, 4) = Cells(i, 4)
        Next i
        t2 = Now()
        Cells(2, 5) = TimeValue(t2) - TimeValue(t1)
        '一次性给数组赋值。数组arr不能定义大小和类型
        t1 = Now()
        arr2 = Range("a3:d" & lineno)
        t2 = Now()
        Cells(2, 6) = TimeValue(t2) - TimeValue(t1)
        MsgBox arr1(20000, 2) & "=" & arr2(20000, 2)
    
    
    End Sub
    

    只是要注意的是,循环赋值的方法数组必须先定义维数和大小,然后才干使用,而一次性赋值的正好相反。不能定义维数和大小,否则会报错。此外注意,数据一次性读入数组arr2后。arr2成为一个二维数组。即使是读取一列数据。也是二维数组,数组下标都是从1開始,即arr2(1,1),arr2(2,1),arr2(3,1),arr2(4,1),。。

    另一点要注意,当读取的工作表非当前工作表时。range对象后面须要加上valuekeyword,否则会报错,比如:

        '方法一:直接读取
        DaiLiNo = Sheets("代理点").[B65536].End(xlUp).Row           '行数
        DaiLiName = Sheets("代理点").Range("B2:B" & DaiLiNo).Value
        '方法二:激活工作表后读取
        Worksheets("代理点").Select
        DaiLiNo = [B65536].End(xlUp).Row           '行数
        DaiLiName = Range("B2:B" & DaiLiNo)
        DaiLiNo = DaiLiNo - 1                      '数据从第2行開始,所以总数量要减一
    

    假设赋值范围用行列号表示,则用下列语句(pos_fst, pos_ems是两个參数,各自是数据起始行和数据所在列):

    maxrow = Cells(65536, pos_ems).End(xlUp).Row

    Mail = Range(Cells(pos_fst, pos_ems), Cells(maxrow, pos_ems))

    用上面的例程測试发现,即使20多万条数据,第一种方法用时非常少(4.62963E-05)。而另外一种方法却差点儿不用时间(0)。

  • 相关阅读:
    ASP.NET Core 2.2 基础知识(二) 中间件
    ASP.NET Core 2.2 基础知识(一) 依赖注入
    初识.NET Core
    volatile 和 Interlocked
    线程池
    MySQL 将某个字段值的记录排在最后,其余记录单独排序
    MySQL 一张表中两个字段值互换
    (转) C#解惑:HashSet<T>类
    利用 ildasm 修改被编译后DLL文件
    shell 字符串判断
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5369971.html
Copyright © 2020-2023  润新知