精华内容
下载资源
问答
  • 本章主要内容:认识数组,数组应用案例,小结。

    上一篇:【VBA(十):使用Dir函数合并多个文件的数据】【对象赋值到变量(Set)+认识Dir函数+小结】

    认识数组

    一组变量。可以将区域作为数组。

    循环中取值会拖慢运行效率,运用数组可以提高效率

    数组应用案例

    求和

    原数据(20W条)
    在这里插入图片描述
    计算苏州的所有金额
    代码
    在这里插入图片描述

    最值

    原数据
    求最大销售及对应产品
    在这里插入图片描述
    代码
    在这里插入图片描述
    效果图
    在这里插入图片描述

    UBound(arr):返回数组上限
    LBound(arr):返回数组下限

    小结

    知识点

    什么是数组
    如何定义数组
    动态数组与静态数组
    计算数组的大小
    重定义数组大小

    概念

    Dim Arr() As String
    Range(“A1”) = Arr(2,1)
    Arr=Range(“a1:b10”)
    数组可以用在函数里面
    可以把值和区域赋值给数值

    下一篇:【VBA(十二):使用ActiveX控件】【按钮控件+标签控件+单选按钮控件+微调按钮控件+设计测试系统+小结】

    展开全文
  • VBA数组应用实例下载

    2009-06-13 14:47:34
    VBA实例,一切来处网络,分享给大家一起学习
  • Excel VBA字典与数组精讲,供Excel高级开发者和爱好者学习使用
  • 大家好,我们今日继续讲解VBA数组与字典解决方案第22讲:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法。如果文本中含有大量的重复值,此时,如果我们要剔除重复值,该怎么办?用VBA的方法该如何做到...

    大家好,我们今日继续讲解VBA数组与字典解决方案第22讲:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法。如果文本中含有大量的重复值,此时,如果我们要剔除重复值,该怎么办?用VBA的方法该如何做到呢?我在这讲和下一讲中将解答这个问题,并提供给读者一个可以测试的实例。今日先讲这个内容要用到的知识点。

    一 :Filter函数:这个函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集,语法如下:Filter(sourcesrray, match[, include[, compare]])

    参数

    a) sourcesrray是必须的,要执行搜索的一维字符串数组。

    b) match是必须的,要搜索的字符串。

    c) include是可选的,Boolean值,表示返回子串是否包含match字符串。如果参数include是True,Filter函数返回的是包含match参数子字符串的数组子集。如果参数include是False,Filter函数返回的是不包含match参数子字符串的数组子集。

    d) compare是可选的,所使用的字符串比较类型。

    二:ReDim语句,这个语句在过程级别中使用,用于为动态数组变量重新分配存储空间,语法如下:

    ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]]

    参数

    a) Preserve是可选的,关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。

    b) varname是必须的,变量的名称。

    c) subscripts是必须的,数组变量的维数,最多可以定义 60 维的多维数组,使用下面的语法;[lower To] upper [,[lower To] upper]

    使用动态数组去除文本中的重复值,如下面的代码所示。

    Sub MyNZsz_5() '第22讲 利用数组排重的方法

    Dim Splarr() As String

    Dim Arr() As String

    Dim Temp() As String

    Dim r As Integer

    Dim i As Integer

    On Error Resume Next

    Splarr = Split(Sheets("22").Range("a1"), " ")

    For i = 0 To UBound(Splarr)

    Temp = Filter(Arr, Splarr(i))

    If UBound(Temp) < 0 Then

    r = r + 1

    ReDim Preserve Arr(1 To r)

    Arr(r) = Splarr(i)

    End If

    Next

    Sheets("22").Range("a5").Resize(r, 1) = Application.Transpose(Arr)

    End Sub

    代码解析:

    MySplitarr过程将工作表Sheets("22")中A1单元格的文本去除重复值后写入到工作表Sheets("22")中的A列单元格。

    第2行代码声明数组Splarr用来保存Sheets("22")中A1单元格的文本。

    第3行代码声明数组Arr用来保存去除重复值后的文本。

    第4行代码声明数组Temp用来判断文本是否重复。

    第5行代码声明变量r用来保存去除重复值后的文本数量。

    第7行代码启动错误处理程序来忽略错误,因为在程序运行到第11行代码会发生下标越界错误。

    第8行代码使用Split 函数以Sheets("22")中A1单元格的文本创建一个下标从零开始的一维数组。

    第9行代码使用For...Next语句遍历数组Splarr的所有元素。

    第10行代码使用Filter函数创建一个数组Temp用来保存以当前Splarr数组的值在Arr数组中的搜索结果。

    第11行代码根据返回的数组Temp的最大下标来判断当前Splarr数组的值是否重复。在使用使用Filter函数时如果没有相匹配的值,将返回一个空数组,最大下标小于0。如果没有找到,返回的结果是-1.

    第12行代码如果当前Splarr数组的值不重复则将变量r的值加1。

    第13行代码重新定义动态数组大小。

    第14行代码将不重复值添加到数组Arr中。

    第15行代码使用工作表Transpose函数将去除重复值的的文本转置后写入到工作表单元格中。

    代码的截图:

    d747003cdace1f1ba40cecc167fc8873.png

    运行前的截图:很显然有很多的重复数值:

    d11ce6b7887f1546c37cd1f7c697cbc9.png

    运行后的截图:

    0aae4e6bbfe01274cf2bc4527f3ea5df.png

    今日内容回向:

    1 上述代码是否清楚了它的运行过程呢?

    2 第7行代码启动错误处理程序来忽略错误,这是为什么呢?

    展开全文
  • 大家好,我们今日继续讲解VBA代码解决方案的第61讲内容:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法。在上一讲中我们讲了使用数组函数将单元格中的文本进行分隔后写入到工作表中的方法,那么问题...

    大家好,我们今日继续讲解VBA代码解决方案的第61讲内容:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法。在上一讲中我们讲了使用数组函数将单元格中的文本进行分隔后写入到工作表中的方法,那么问题来了,如果文本中含有大量的重复值,在写入时也会将重复值写入到工作表中,此时,如果我们要剔除重复值,该怎么办?用VBA的方法该如何做到呢?我在这讲和下一讲中将解答这个问题,并提供给读者一个可以测试的实例。今日先讲这个内容要用到的知识点。

    d8b5ca8979c9dd95a6d1177a466d84ad.png

    一 :Filter函数:这个函数返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集,语法如下:

    Filter(sourcesrray, match[, include[, compare]])

    参数

    a) sourcesrray是必需的,要执行搜索的一维字符串数组。

    b) match是必需的,要搜索的字符串。

    c) include是可选的,Boolean值,表示返回子串是否包含match字符串。如果参数include是True,Filter函数返回的是包含match参数子字符串的数组子集。如果参数include是False,Filter函数返回的是不包含match参数子字符串的数组子集。

    d) compare是可选的,所使用的字符串比较类型。

    二:ReDim语句,这个语句在过程级别中使用,用于为动态数组变量重新分配存储空间,语法如下:

    ReDim [Preserve] varname(subscripts) [As type] [, varname(subscripts) [As type]]

    参数

    a) Preserve是可选的,关键字,当改变原有数组最末维的大小时,使用此关键字可以保持数组中原来的数据。

    b) varname是必需的,变量的名称。

    c) subscripts是必需的,数组变量的维数,最多可以定义 60 维的多维数组,使用下面的语法;[lower To] upper [,[lower To] upper]

    讲到这里,有的人会提出这样的问题,什么是过程呢?有兴趣的朋友可以看我之前写的一篇文章:什么是宏?什么是过程?这里定义更为精确的给出:那么什么是过程呢?就是将输入转化为输出的一组活动。在VBA中过程两种一是Sub过程和Function函数过程。也就是说每组开始为SUB的活动都是一个过程,或者说每组开始为Function的活动也都是一个过程。ReDim语句就是在这个级别使用语句。

    今日内容回向:

    1: Filter函数的作用是什么?

    2:ReDim语句的作用是什么?

    3 什么是过程?

    展开全文
  • 随着字典讲解的深入,我们发现字典真的很神奇,在VBA代码中,给人以十分清爽的感觉,在这套数组与字典解决方案中,我会尽可能的把经常用到的实例多多讲解给大家,让大家对于字典的理解更加深入.虽然这块内容利用其它方案都...

    大家好,今日我们继续讲解数组与字典解决方案,今日讲解第47讲:利用字典和数组,实现按指定规则的排序。随着字典讲解的深入,我们发现字典真的很神奇,在VBA代码中,给人以十分清爽的感觉,在这套数组与字典解决方案中,我会尽可能的把经常用到的实例多多讲解给大家,让大家对于字典的理解更加深入.虽然这块内容利用其它方案都可以实现,但是字典确实能大大简化我们的代码.让我们对于VBA的理解更深入.

    今日实例是实现按指定规则的排序,为什么会有这个课题呢?对于职场中的我们经常会用到数据分析,往往数据来源不一致,同样项目,由于来源不同,往往排序的方式不同,而且有时候要求提交数据的排序并不是EXCEL自带功能可以解决的,这个时候怎么办?我们依然可以用字典来帮助解决,我们看下面的数据:

    53fdabce60a4b8db6c95147d0cd752ea.png

    大家注意到,在A,B列中,给出了排序的规则,在D,E,F列中是提供的报表数据,但这个数据报表的排序不符合A,B列的排序规则,我们要实现的是把报表数据按照固定的规则来排序,如何做到呢?下面看我给出的代码:

    Sub mynzsz_47() '第47讲 利用数组和字典,实现按指定规则的排序

    Sheets("47").Select

    Dim mybrr()

    '建立字典

    Set myDic = CreateObject("Scripting.Dictionary")

    '把数据装入数组

    myarr = Range("a2:f" & [a65536].End(xlUp).Row)

    '动态数组的再分配

    ReDim mybrr(1 To UBound(myarr), 1 To 4)

    '字典的赋值,也是排序规则的建立

    For i = 1 To UBound(myarr)

    myDic(CStr(myarr(i, 1))) = i

    Next i

    '给定数据的排序,其实是把给定的数据,按照字典建立的规则放到另外一个数组中

    For i = 2 To Cells(65536, 4).End(xlUp).Row

    If myDic(CStr(myarr(i - 1, 4))) <> "" Then

    mybrr(myDic(CStr(myarr(i - 1, 4))), 1) = myarr(i - 1, 4)

    mybrr(myDic(CStr(myarr(i - 1, 4))), 2) = myarr(i - 1, 5)

    mybrr(myDic(CStr(myarr(i - 1, 4))), 3) = myarr(i - 1, 6)

    End If

    Next i

    '数据的回填

    [d2].Resize(UBound(mybrr), 3) = mybrr

    End Sub

    代码的截图:

    84b415db5eca1c9374a2a223a929a506.png

    代码讲解:

    1 上述代码实现了数据按指定规则排序,只要给定规则,就可以实现数据的自定义排序。

    2 '把数据装入数组

    myarr = Range("a2:f" & [a65536].End(xlUp).Row)

    上述代码将数据放到数组中,在实际应用中,也可以将规则数据和报表数据分别放在不同的数组中。

    3 '动态数组的再分配

    ReDim mybrr(1 To UBound(myarr), 1 To 4)

    这个动态数组是用来装排序完成的数据的。

    4 '字典的赋值,也是排序规则的建立

    For i = 1 To UBound(myarr)

    myDic(CStr(myarr(i, 1))) = i

    Next i

    大家要注意这几行代码即给字典赋值同时又用键值定义了排序的规则,大家可以理解一下。

    5 '给定数据的排序,其实是把给定的数据,按照字典建立的规则放到另外一个数组中

    For i = 2 To Cells(65536, 4).End(xlUp).Row

    If myDic(CStr(myarr(i - 1, 4))) <> "" Then

    mybrr(myDic(CStr(myarr(i - 1, 4))), 1) = myarr(i - 1, 4)

    mybrr(myDic(CStr(myarr(i - 1, 4))), 2) = myarr(i - 1, 5)

    mybrr(myDic(CStr(myarr(i - 1, 4))), 3) = myarr(i - 1, 6)

    End If

    Next i

    在上述代码中,首先在字典中查找报表数据在字典中是否存在,如果存在,那么就存放到存放排序结果的数组中,但是放在结果数组中的时候,存放顺序是键值给出的顺序。

    6 '数据的回填

    [d2].Resize(UBound(mybrr), 3) = mybrr

    将排序的结果回填到数据区域.

    下面看代码的运行结果:

    7b2d7249d3d74a427deeeefa3428398d.png

    今日内容回向:

    1 如何实现报表数据按指定规则的排序?

    2 myDic(CStr(myarr(i, 1))) = I 的意义是什么?

    展开全文
  • 最近代码多是出自”VBA数组与字典解决方案”教程,有一些朋友反映分享的内容不能很好的理解,可以参考这套资料的内容进行研读。今日分享的是第272期。 VBA过程代码272:利用字典,进行单条件匹配查询 Sub MyNZ () ...
  • 一、动态数组的定义 动态数组的定义,一开始不需要给数组标明上界和下界。直接定义即可,如下面的代码: ...因此,要使用动态数组,就必须对其定义好下界和上界。 二、给动态数组确定下界和上界 给动态数
  • Hello,大家好,在前面我们说过Excel函数中间的数组含义,...VBA数组可以理解成是储存的一组数据的一个地方。他的数据类型可以是数字,文本,对象,当然也可以是VBA数组。可能有些同学会觉得比较抽象,但是经过慢慢...
  • excel的vba数组

    2020-03-30 14:31:10
    什么是vba数组?先让我们从字面来看一下它的意思:“数:数据;组:组合”。从字面很直观地看出,数组就是N个数据的组合,如果某个变量只包含一个数据,就不是数组,只能是一个普通的变量。 有人把数组比喻为一串用...
  • 学习VBA的同学经常会用到数组的排序,网上介绍的程序算法一般都是举例一维数组, 而一般实际使用时更多的需要对二维数组进行排序,本人结合大家分享的冒泡排序算法 编写了二维数组的冒泡排序实例,供大家参考。...
  • vba 数组(动态数组

    万次阅读 2013-10-15 10:38:08
    主要内容: 本文章主要介绍VBA中,数组使用,特别介绍动态数组使用,并有简单事例,帮助理解。 数组是我们经常用到的存储数据的一种媒介,他到底是什么呢? 一、定长数组 数组是具有相同数据类型并且共享...
  • excel vba真正的动态数组实例

    千次阅读 2014-02-11 10:22:20
    excel vba真正的动态数组实例。  一、动态数组的定义  动态数组的定义,一开始不需要给数组标明上界和下界。直接定义即可,如下面的代码:  Dim MyStr() As String  这样,就定义了一个动态数组及其名称:MyStr...
  • excel vba真正的动态数组实例 一、动态数组的定义  动态数组的定义,一开始不需要给数组标明上界和下界。直接定义即可,如下面的代码:  Dim MyStr() As String  这样,就定义了一个动态数组及其...
  • 使用array_unique函数即可,使用实例如下: <?php $aa=array("1","2","3","3","2","watermalon"); $bb=array_unique($aa); print_r($bb); ?> 结果如下: Array ( [0] => 1 [1] => 2 [2] => 3 [5] => ...
  • VBA数组赋值

    2012-04-05 23:30:05
    先说一下,刚才一个错误的操作,连保存的草稿都没了,这也太悬了。... '10是可以使用的最大上标,这和C语言不太一样 Dim a3(-2 To 10) As Integer '也可以定义下标 Dim a1() As Integer '定义变长数组...
  • 发现更简单的: a=Application.RandBetween(-10, 10) 直接生成-10到10之间的随机整数 关于二维数组Redim Preserve: ... 1 如果使用了 Preserve 关键字,就只能重定义数组最末维的大小,且根本不能改变维数的...
  • VBA--实例1.3--数据分类汇总

    千次阅读 2019-07-09 13:35:44
    实例 数据分类汇总 目标 以班级为筛选条件将数据条分类,并保存到新工作簿中 demo分解 创建目标sheet 根据筛选条件逐一汇总到目标sheet move sheet 到新的工作簿...
  •  vba是编程语言,宏是用vba代码保存下来的程序。录制的宏是vba里最简单的程序,正因为如此,录制宏存在许多缺陷:如无法进行判断和循环,不能显示用户窗体,不能进行人机交互……  解决录制宏的这些问题,需要...
  • EXCEL VBA应用开发与实例精讲完整版

    热门讨论 2012-04-16 14:17:15
    VBA(Visual Basic for Applications)是Office 系列软件的内置编程语言,在Excel中使用VBA编程将会开发出很有价值的应用程序。本书结合作者多年的开发经验,循序渐进地讲述如何利用VBA来开发基于Excel的应用程序。...
  • 大家好,今日继续讲VBA数组与字典解决方案的第27讲,内容是两列数据中相互去掉重复值之后将数据合并。这讲的内容利用到动态数组,固定数组,数组的合并,数组的转置等等。还是先看实例,下面的工作表中A列和B列有两列...
  • 错误处理、类模块的使用、用户窗体的使用数组应用、Automation等等,不一一 列举,读者可根据自身情况,逐一进行渐进式学习。 对于书中所涉及的一些代码可能读者还会有更好的、更简单的方法,也或者有些代 码还...
  • EXCEL VBA应用开发与实例精讲

    热门讨论 2009-05-06 15:34:29
    EXCEL VBA应用开发与实例精讲 作 者: 夏强 编著. 出 版 社: 科学出版社 出版时间: 2006-3-1 内容简介 VBA(Visual Basic for Applications)是Office 系列软件的内置编程语言,在Excel中使用VBA编程将会开发出...
  • ”意思就是说,开发人员不必显式地实例化内置对象,因为它们已经实例化了。内置对象有:Object,Array, Date , RegExp , Function , Boolean , Number ,String,Global,Math和 JSON ,一共11个。其中String,Number和...
  • VBA - 字典实例集锦

    2021-04-08 10:58:46
    字典法去重 7.1 对表格中的一列数据去重 7.2 对一维数组去重 8. 将字典输出到工作表,keys方法和items方法 8.1 将字典输出到工作表 8.2 keys 方法和 items 方法在前期绑定和后期绑定时读取字典指定位置元素的区别 ...
  • EXCEL VBA应用开发与实例精讲4/4

    热门讨论 2009-05-06 15:38:12
    EXCEL VBA应用开发与实例精讲 作 者: 夏强 编著. 出 版 社: 科学出版社 出版时间: 2006-3-1 内容简介 VBA(Visual Basic for Applications)是Office 系列软件的内置编程语言,在Excel中使用VBA编程将会开发出...
  • UDF.dll包含了一组实用的用户自定义函数,提供了数组处理的快速方法,可以在VB6、VBS、32位VBA中调用。 看完如下的实例代码,就明白它的用处了。 Private MyUDF As New UDF.ArrayConversion Sub 是否包含某元素...
  • Excel VBA技巧实例手册

    2016-07-28 22:29:39
    第1篇 ExcelVBA基础 第1章 了解Excel宏 1.1 创建宏 技巧001显示“开发工具”选项卡 技巧002录制第一个宏 技巧003在VBE中创建宏 1.2 管理宏 技巧004运行宏 技巧005编辑宏 技巧006保存宏 技巧007设置宏的安全性 第2...
  • excelvba数组入门浅析

    千次阅读 2007-04-18 21:02:00
    什么是vba数组?先让我们从字面来看一下它的意思:“数:数据; 组:组合”。从字面很直观地看出,数组就是N个数据的组合,如果某个变量只包含一个数据,就不是数组,只能是一个普通的变量。有人把数组比喻为一串用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,182
精华内容 472
关键字:

vba数组应用实例