【VBA研究】怎样将单元格数据赋给数组[通俗易懂]

【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)。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115418.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ssb门限_SSB调制「建议收藏」

    ssb门限_SSB调制「建议收藏」1基于SystemView的模拟线性调制系统仿真3.1.1AM调幅一、实验目的:1.熟悉使用SystemView软件,了解各部分功能软件的操作和使用方法。2通过实验进一步观察.了解模拟信号AM调制、解调原理。3掌握AM调制信号的主要性能指标4比较、理解AM调制的相干解调和非相干解调原理。二、实验内容用SystemView构造一个AM调制、解调系统,观察个模块输出波形,了解AM调制、解调原理,…

    2022年6月15日
    27
  • 三款免费好用的Gif录屏神器

    1.免费开源的GIF录制工具ScreenToGif官网地址:http://www.screentogif.com/ScreenToGif,国外免费开源小巧实用的Gif动画录制工具!使用ScreenToGif,可以将屏幕任何区域及操作过程录制成GIF格式的动画图像,保存过程还可以对GIF动画进行编辑优化。这款非常优秀的工具原生单执行文件,界面非常简单,功能很实用,它具有录制屏幕、录制摄像…

    2022年4月5日
    200
  • shuffer_shuforall

    shuffer_shuforall论文:ShuffleNet:AnExtremelyEfficientConvolutionalNeuralNetworkforMobileDevices论文提到模型加速的方法为:1) 修剪网络,减少分支(pruningnetworkconnections)。2) 对于一个训练好的网络(pre-trainedmodel),在性能不下降的情况下减少冗余的分支。3) 量化(qua…

    2025年7月13日
    2
  • 漏洞扫描工具汇总「建议收藏」

    漏洞扫描工具汇总「建议收藏」漏洞扫描器可以快速帮助我们发现漏洞,如SQL注入漏洞、CSRF、缓冲区溢出等。下面就介绍几种常用的漏洞扫描工具。Fortify代码审计工具FortifySCA(FortifyStaticCodeAnalyzer),一款软件代码安全测试工具,提供静态源码扫描能力,包含了五大引擎分析系统:语义、结构、数据流、控制流、配置流。分析的过程中与特有的软件安全漏洞规则集进行全面的匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并生成报告。BurpSuiteAWVSAppScanDependen

    2025年11月7日
    8
  • python set 一些用法

    python set 一些用法

    2021年11月27日
    44
  • 生于MVP,死于PMF

    生于MVP,死于PMF本文的主要内容会按照是什么、为什么以及如何做的逻辑展开,主要包括以下几部分:什么是MVP与PMF;为什么要有MVP与PMF;如何创建MVP;如何验证PMF。什么是MVP与PMFMVP(MinimalViableProduct),意思是最小可行性产品。即通过一个最小化、却可以满足核心需求的产品来测试市场的反应。为了能更好的理解MVP的概念,可参考下图。…

    2022年5月11日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号