【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)。
【VBA研究】怎样将单元格数据赋给数组的更多相关文章
- 使用VBA将Excel指定单元格数据、字符串或者图表对象插入到Word模板指定书签处
准备工作: 1.首先需要提供一个word模板,并且标记好您要插入书签的位置,定义书签的命名.如图 2.模拟您要插入的Excel原始数据和图表对象 插入代码如下: Private Sub Command ...
- 在Excel里用vba给合并的单元格添加注释
Excel里使用VBA对已经合并的单元格添加注释,直接使用AddComment会报: 运行时错误 '1004':应用程序定义或者对象定义错误 找了很多文章都没找到怎么解决,最后发现在AddCommen ...
- jqgrid设置单元格数据
$("#gridid").jqGrid('setCell',rowid,icol,data); rowid为行ID,jqgrid内置的那个,从1开始 icol为列索引,从0开始, ...
- QTableWidget 用法总结(只能使用标准的数据模型,并且其单元格数据是QTableWidgetItem的对象)
QTableWidget是QT程序中常用的显示数据表格的空间,很类似于VC.C#中的DataGrid.说到QTableWidget,就必须讲一下它跟QTabelView的区别了.QTableWidge ...
- Swing-JTable检测单元格数据变更事件
在JTable的初级教程中往往会提到,使用TableModel的 addTableModelListener方法可以监听单元格数据的变更,在其事件处理函,数tableChanged中,可以通过e.ge ...
- [转载]Java读取Excel中的单元格数据
目前网上能找到的读取Excel表格中数据的两种比较好的方案:PageOffice好用开发效率高:POI免费.供大家参考,针对具体情况选择具体方案. 1. PageOffice读取excel impor ...
- VBS读取txt文档数据查找Excel中单元格数据符合条件的剪切到工作表2中
Dim fso,f,a set oExcel = CreateObject( "Excel.Application" ) oExcel.Visible = false '4) 打开 ...
- JS遍历表格获取每行数据及每个单元格数据
/** * 遍历表格获取每行数据及每个单元格数据 * @param tableID 表格ID */ function GetTable(tableID) { var milasUrl = {};//新 ...
- python接口自动化测试--数据分离读取Excal指定单元格数据
上一篇博客讲了怎么批量读取Excal单元格数据,现在咱们说一下怎么读取Excal指定单元格数据. 一.首先建一个Test_Main类 #!/usr/bin/python # -*- coding: U ...
随机推荐
- C# WinForm中 让控件全屏显示的实现代码
夏荣全 ( lyout(at)163.com )原文 C#中让控件全屏显示的实现代码(WinForm) 有时候需要让窗口中某一块的内容全屏显示,比如视频播放.地图等等.经过摸索,暂时发现两种可行方法, ...
- codevs1796-最小完全图
表示第一篇就是水题. 根据Prim的思想,我们可以证明:dis ( a , b ) > max { a b 最小生成树路径上的边权 } 把所有边sort一遍用并查集维护就可以了 #include ...
- bzoj 4006 [JLOI2015]管道连接(斯坦纳树+状压DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4006 [题意] 给定n点m边的图,连接边(u,v)需要花费w,问满足使k个点中同颜色的 ...
- Tkinter教程之Event篇(3)
本文转载自:http://blog.csdn.net/jcodeer/article/details/1823550 '''Tkinter教程之Event篇(3)''''''11.两个事件同时绑定到一 ...
- 在fedora20下面手动为自己的安装程序创建桌面图标
(博客园-番茄酱原创) 在/usr/share/applications/下面创建destktop文件,用于产生桌面图标 创建文件:touch android-eclipse.desktop 编辑文件 ...
- Stunnix C++ Obfuscator使用简介
因为项目的需求,需要混淆C代码.目前.net和java混淆工具很好用.但是c混淆工具不多.找到一个Stunnix C++ Obfuscator http://www.stunnix.com/网上很少有 ...
- 第二百六十四天 how can I 坚持
现在上班闲的有点蛋疼,感觉没什么事,学不到什么东西. 到底要不要买房啊.也想买啊.愁人. 这辈子绝不会就这样. 睡觉.
- 从一个开发的角度看负载均衡和LVS(转)
原文:http://blog.hesey.net/2013/02/introduce-to-load-balance-and-lvs-briefly.html 在大规模互联网应用中,负载均衡设备是必不 ...
- sass学习(2)——关于变量
定义一个sass变量 可以说,变量是一个编程语言的基础.所以对于sass来说,变量肯定是浓墨重彩的其中一笔,当然函数也是.那我们如何声明定义一个sass的变量呢? 变量的符号$ 变量名称 变量的值 那 ...
- jquery easyui中的dialog拖动超出浏览器问题解决办法
juqery easyui当鼠标点着拖动超出浏览器后,就回不来了,拉不下的问题: //控制dialog超出浏览器回到原来的地方 var default_left; var default_top;// ...