作者: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)。

【VBA研究】怎样将单元格数据赋给数组的更多相关文章

  1. 使用VBA将Excel指定单元格数据、字符串或者图表对象插入到Word模板指定书签处

    准备工作: 1.首先需要提供一个word模板,并且标记好您要插入书签的位置,定义书签的命名.如图 2.模拟您要插入的Excel原始数据和图表对象 插入代码如下: Private Sub Command ...

  2. 在Excel里用vba给合并的单元格添加注释

    Excel里使用VBA对已经合并的单元格添加注释,直接使用AddComment会报: 运行时错误 '1004':应用程序定义或者对象定义错误 找了很多文章都没找到怎么解决,最后发现在AddCommen ...

  3. jqgrid设置单元格数据

    $("#gridid").jqGrid('setCell',rowid,icol,data); rowid为行ID,jqgrid内置的那个,从1开始 icol为列索引,从0开始, ...

  4. QTableWidget 用法总结(只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象)

    QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC.C#中的DataGrid.说到QTableWidget,就必须讲一下它跟QTabelView的区别了.QTableWidge ...

  5. Swing-JTable检测单元格数据变更事件

    在JTable的初级教程中往往会提到,使用TableModel的 addTableModelListener方法可以监听单元格数据的变更,在其事件处理函,数tableChanged中,可以通过e.ge ...

  6. [转载]Java读取Excel中的单元格数据

    目前网上能找到的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高:POI免费.供大家参考,针对具体情况选择具体方案. 1. PageOffice读取excel impor ...

  7. VBS读取txt文档数据查找Excel中单元格数据符合条件的剪切到工作表2中

    Dim fso,f,a set oExcel = CreateObject( "Excel.Application" ) oExcel.Visible = false '4) 打开 ...

  8. JS遍历表格获取每行数据及每个单元格数据

    /** * 遍历表格获取每行数据及每个单元格数据 * @param tableID 表格ID */ function GetTable(tableID) { var milasUrl = {};//新 ...

  9. python接口自动化测试--数据分离读取Excal指定单元格数据

    上一篇博客讲了怎么批量读取Excal单元格数据,现在咱们说一下怎么读取Excal指定单元格数据. 一.首先建一个Test_Main类 #!/usr/bin/python # -*- coding: U ...

随机推荐

  1. wifi详解(一)

    1        WLAN技术 WLAN是英文WirelessLAN的缩写,就是无线局域网的意思.无线以太网技术是一种基于无线传输的局域网技术,与有线网络技术相比,具有灵活.建网迅速.个人化等特点.将 ...

  2. [Everyday Mathematics]20150112

    设 $f\in C[0,1]$ 适合 $$\bex \int_x^1 f(t)\rd t\geq \frac{1-x^2}{2},\quad \forall\ x\in [0,1]. \eex$$ 试 ...

  3. java web 学习十三(使用session防止表单重复提交)

    在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提 ...

  4. Xamarin Mono Android Ios 安装、破解(4.12)

    一.Windows下面的安装 1. 安装环境介绍: Win8.1 企业版64位.VS2013,mono-android-4.12.02001,下面的安装过程都是在VS2013已经安装成功之后的操作,本 ...

  5. 试验Windows Embedded Standard 7 Service Pack 1 Evaluation Edition

    =========================================== 是否支持再使用 RT 7 Lite 精简 ? ================================= ...

  6. ios游戏开发--cocos2d学习(2)

    在第一节中简单介绍了2d项目模板HelloWorld的基础代码,并做了一点小小的改变,像触摸接收.旋转.移动和颜色转变序列CCSequence的使用等等,2d本身封装好了很多方便使用的动作,只需要调用 ...

  7. 数往知来C#之面向对象准备〈一〉

    1.CLR加载编译源文件 注1.:当你点击调试或者生成解决方案的时候这就是一个编译过程首先CLR加载源文件也就是你写的代码(此代码在文件中是字符串)然后将项目中的嗲吗编译成IL代码进而生成程序集 证明 ...

  8. HDFS分布式文件系统设计思想

    HDFS设计目标 1)硬件错误是常态,数据保存需要冗余. 2)数据批量读取,Hadoop擅长数据分析而不是事务处理. 3)大规模数据集. 4)简单一致醒模型,降低系统复杂度,文件一次写入多次读取, 5 ...

  9. 关于Tokenizer与TokenFilter的区别

    TokenStream是一个能在被调用后产生语汇单元流的类,但是 TokenStream 类有两个不同的类型:Tokenizer 类和 TokenFilter 类.这两个类都是从抽象类TokenStr ...

  10. ZOJ3772 - Calculate the Function(线段树+矩阵)

    题目大意 给定一个序列A1 A2 .. AN 和M个查询 每个查询含有两个数 Li 和Ri. 查询定义了一个函数 Fi(x) 在区间 [Li, Ri] ∈ Z. Fi(Li) = ALi Fi(Li ...