-
2019-05-03 01:49:57
定义数组
- 固定宽度数组
'在声明数组时,必须指定数组上界索引号,下界索引号没有指定,则默认为0。 '所以:dim arr(10) 与 dim arr(0 to 10) 实际效果是一样的,arr上界索引都是0,数组从0-10 dim arr(10) as Integer '该数组指定了下界索引为1,如果没有指定数组数据类型,则默认为变体型变量:Variant,可以赋值各种类型数据。 dim arr(1 to 10) '定义二维数组:10行*2列 dim arr(1 to 10,1 to 2) '将字符串‘第二行第一列’赋值给数组arr arr(2,1) = "第二行第一列"
- 动态数组
dim arr '将区域单元格的值赋值给arr '数组的上标是从arr(1,1)开始的。注意:arr(1,1)的值是range("a3")的值,即单元格区域左上角值为arr(1,1)。 arr = range("a3:c10") '不知道数组空间多大的情况下,先这么定义,假设需要一维数组。 dim arr() '有一个数据符合条件,重新redim定义数组,将其赋值给数组。 redim arr(1 to 1) arr(1) = "第一个数据" '现在发现了第二个符合条件的数据,需要先重新定义数组大小,再赋值。 '这里需要注意,重新定义数据,如果不想丢失之前赋值的数组内容,需要在定义时使用‘preserve’关键字。 redim preserve arr(1 to 2) '赋值 arr(2) = "第二个数据"
获取数组的上下标
dim arr arr = range("a1:c10") '获取上标,我们可以知道数组的形状大小。 ubound(arr) '数组行的上标,这里是10,一共有10行。 ubound(arr,2) '数组列的上标,指定第二个参数为‘2’是获取列的上标,这里是3,a列到c列一共是3列。 '获取下标 '一般是1,没什么意义,当然如果是dim arr(10),这样下标是0。 lbound(arr) lbound(arr,2)
可能用到的函数&方法
- 数组也可以使用工作表一些函数,比如:
- sum:求和
'对数组数据求和 Application.WorksheetFunction.Sum(arr)
- index:截取数组某行或者某列
'定义10行10列数组 dim arr(1 to 10,1 to 10) '这里需要注意的是,index第二个或第三个参数,必须有一个为0,只能截取某行或者某列。 '截取第二列,第三个参数表示截取哪一列。 Application.WorksheetFuncion.Index(arr,0,2) '截取第三行,第二个参数表示截取哪一行。 Application.WorksheetFuncion.Index(arr,3,0)
- join:使用指定字符串拼接数组
arr = array("姓名","年龄") '使用下划线将数组连接起来,类似sql的concat函数。 st = join(arr,"_") '输出:姓名_年龄
- 清空数组
'有时候我们并不需要该数组了,为节省内存空间,可以清空数组。 Erase arr
数组写入到单元格
'定义一个一个10行5列数组。 dim arr(1 to 10,1 to 5) dim rg as range dim i as Byte 'for each 循环只能用变体型变量,这也是一个需要注意的地方 dim each_arr i = 1 '对数组进行连续整数赋值 for each each_arr in arr each_arr = i i = i + 1 next '使用with语句,可以省去部分代码量。不用再重复引用activesheet,直接在‘.’后面使用with对象的属性或方法即可。 with activesheet set rg = .range("a1").resize(10,5) 'resize用于表示单元格范围,第一个参数表示以起点单元格a1为始的行数,第二个表示列数,数组是10行5列的。 rg = arr '清除单元格内容 rg.clearcontents '将第三列数组数据写入到单元格 .range("a1").resize(10,1) = application.worksheetfunction.index(arr,0,3) rg.clearcontents '将第五行数组数据写入到单元格 .range("a1").resize(1,5) = application.worksheetfunction.index(arr,1,0) '注意,如果单元格的长度不够数组长度,则会从数组下标开始截取单元格长度填充内容到单元格。 .range("a1").resize(1,3) = application.worksheetfunction.index(arr,1,0) rg.clearcontents '将第五行数组数据纵向写入到单元格,使用工作表函数:transpose数组转置 .range("a1").resize(5,1) = application.worksheetfunction.transpose(application.worksheetfunction.index(arr,1,0)) '数组写入到单元格不需要了,清空。 Erase arr end with
数组筛选代码示例:
数据源:
地区 |水果 |销量
广东 |苹果 | 1
湖南 |苹果 | 2
海南 |椰子 | 6
湖南 |苹果 | 5
河北 |柿子 | 7
湖南 |橘子 | 4Sub arr_autofiter() '关闭屏幕更新 Application.ScreenUpdating = False '关闭自动重算 Application.Calculation = xlCalculationManual Dim arr(), brr Dim i, r As Long r = 1 With ActiveSheet brr = .[a1].CurrentRegion ReDim Preserve arr(1 To 3, 1 To r) arr(1, r) = "地区" arr(2, r) = "水果" arr(3, r) = "销量" For i = 2 To UBound(brr) If brr(i, 1) = "湖南" And brr(i, 2) = "苹果" Then r = r + 1 ReDim Preserve arr(1 To 3, 1 To r) arr(1, r) = brr(i, 1) arr(2, r) = brr(i, 2) arr(3, r) = brr(i, 3) End If Next '将筛选后的数组写入到单元格 .Cells(1, "e").Resize(UBound(arr, 2), UBound(arr)) = Application.WorksheetFunction.Transpose(arr) End With '恢复屏幕更新,工作表自动重算 Application.Calculation = xlCalculationAutomatic Application.ScreenUpdating = True End Sub
- 效果如图:
遍历目录下文件夹和文件区分存放
arr存放文件,brr存放文件夹
Sub find_dir() Dim arr() Dim brr() Dim a, b As Byte path1 = ThisWorkbook.Path & "\" f = Dir(path1, vbDirectory) Do While f <> "" If InStr(f, ".") > 0 Then a = a + 1 ReDim Preserve arr(1 To a) arr(a) = f Else: b = b + 1 ReDim Preserve brr(1 To b) brr(b) = f End If f = Dir Loop End Sub
更多相关内容 -
VBA数组使用
2019-01-19 17:00:07数组和字典也是VBA的常用到数据类型之一。但是我翻了有四五本VBA教程相关的书,里面都没有介绍到字典,数组到是在介绍数据类型时有介绍,而并没有提到字典。 事实上,字典不是VBA内置的类型,它是Windows脚本语言的... -
VBA数组合并,去除数组中的相同项
2018-08-23 12:05:18VBA简单代码,合并数组,并且去除数组中的相同项!生成新的数组里不包含相同项。 -
vba数组如何精确筛选_Excel VBA 数组知识点,数组能不能用好,就看这个你学会没有...
2020-11-22 00:03:10今天和大家要说的是VBA数组的应用,上篇文章我们说的是数组的基础知识点,有不明白的小伙伴可以点击链接进行知识点回顾Excel VBA 数组基础知识,初学者不可不学的关键知识,今天主要说说数组的几个操作方法,这个是...今天和大家要说的是VBA数组的应用,上篇文章我们说的是数组的基础知识点,有不明白的小伙伴可以点击链接进行知识点回顾Excel VBA 数组基础知识,初学者不可不学的关键知识,今天主要说说数组的几个操作方法,这个是我们以后会经常遇到的,也是经常会使用的方法。
数组的合并和字符串拆分(Join & Split)
在Excel的数据处理时候,我们经常会遇到拆分和合并的操作,可能你在Excel中的基础操作都会,但是我们如果要操作数组呢?数组是在我们内存之中的,我们无法再Excel中可以看到,除非是在本地窗口中可以看到。
一起来看看例子:
拆分字符串 split(字符串,"分隔符")
用分隔连接数组的每个元成一个字符串 join(数组,"分隔符")
是不可以看到这2个函数的用法其实很简单,他们的作用是相反的,一个是合并,一个拆分,天下分分合合,就在你和我之间。有么有喜欢上这对冤家?
但是需要注意的一点是,他们都只能操作一维数组,这个是比较限制的。如果们在二维数组时候,想使用个方法,我们应该第一步转化成一维数组,然后在操作即可。
Filter实现数组筛选
其实数组的筛选就是根据我们指定的条件,从数组中筛选出来符合我们指定条件的值,然后在组成一个新的数组。这个操作你肯定不陌生,如下图所示,我们在Excel中的常规操作:
但是今天我们猪脚是在数组中进行帅选,我们用的是Filter函数,用法是:Filter(数组, 筛选的字符, 是否包含)
我们可能只说使用方法,其实你还是不太明白,我们举一个例子,你看了就明白,如需他所示:
Arr是我们利用常数数组进行赋值的数组,arr1是我们帅选包括字符”A”的新组成的一个数组,arr2,是我们帅选出来不包括“A”的新数组。不知道你发现没有,我们在数组中使用这个函数的时候,只能模糊帅选,并不能精确进行帅选,这个请务必注意一点。
取出数组中的最大值和最小值(Max和Min)
在Excel中我们取出最大值和最小值,我们都是用的MAX和MIN函数,其实这2个在我们的数组中,亦可使用,具体使用方法如下所示:
顺便再说一下,我们也可以取出数组的第几大值和几小值,如下:
这个方法在我们统计数据的时候,经常会用到。
数组求和
在数组中,我们同样可以求和,同样也是借用工作表函数SUM来完成,我们一起看看:
是不是发现,数组怎么这么好用?其实数组操作还不止这些,我们在继续看看:
数组的计数Count和Counta
Count和Counta可以统计数组中数字的个数和数字+文本的个数。如下图所示:
Count和Counta在数组中和Excel中的使用方法是一样的,是通用的。
数组的查询和拆分
假如我们已经有了一个数组,但是我们想查询其中的某一个值,通过帅选只能模糊匹配,那我们有没其他的方法呢?如下:
数组从二维拆分成一维,你是否还记得我们上篇文章说的?
我们可以借用工作表函数index达到按列拆分数组,即多列构成的数组,你可以任意拆分出一列构成新的数组。方法是:Application.Index(数组, , 列数) :
数组拆分其实在VBA中间很难操作,有时候我们是借用API函数,或者说这个函数有多少人知道呢?所以我们一般记下index函数拆分数组即可:
数组维数的转换
今天说的最后一个,数组的维数的转变。这个也可借用工作表函数来完成这个,我们一起来看看吧 !
在转置时只有1列N行的数组才能直接转置成一维数组,这个请注意一下,否则会报错的。
其实我们很多的工作表函数都可以在我们的Excel中进行使用,我们可以自行尝试一下,看看实际的效果。
以上就是我们今天和大家说的代码的中的数组常用技巧,其实VBA代码学习起来非常简单,他就是一个脚本语言的存在,他有自己的条条框框,你按照他的游戏规则来写代码就可以。如果有不明白的或者不懂的可以在下方留言,我们会一一解答的。
我是Excel教案,关注我持续分享更多的Excel技巧!
-
vba数组如何精确筛选_v34.VBA数组知识点76问(七)
2020-11-22 00:03:1258. 如何对以下数组进行简写?Arr(1)=10Arr(2)=20Arr(3)=30Arr(4)=40答:可以简写为一个常量一维数组,即arr=array(10,20,30,40)59. arr = [{"a",10;"b",20;"c",30}]是什么数组?答:这是一个二维常量数组。60. 要求...58. 如何对以下数组进行简写?
Arr(1)=10
Arr(2)=20
Arr(3)=30
Arr(4)=40
答:可以简写为一个常量一维数组,即arr=array(10,20,30,40)
59. arr = [{"a",10;"b",20;"c",30}]是什么数组?
答:这是一个二维常量数组。
60. 要求在数组arr = [{"a",10;"b",20;"c",30}]中精准查找是否存在“b”这个字符,代码应该如何书写?结果如何?
答:其实就是从一个单元格区域查找数据:
61. VBA内长代码如何换行?
答:1)如果是文本字符串可以加以加一个空格一个&和一个空格加一个下划线:
x = "ABCDEFG" & _
"HIJKLMNO"
2)如果不是文本字符串,则空格+下划线+回车,如:
MsgBox "查找结果是"& Application.VLookup _
("b", arr, 2, 0), , "调用工作表函数vlookup"
62. 如何去掉字符串Two,beautiful,girls,and,a,handsome,boy中的逗号并将它们放入一个数组中?
答:另外一种代码写法是:
值得注意的是:split和join只能对一维数组进行操作,如果是单元格或二维数组怎么办?只有一条途径,想办法转换为一维数组。
63.如下图所示,如何将A1:D1单元格用”-”连接起来并存放到E1中单元格?
答:代码及运行结果如下:
64. 如何将同列单元格内容用”-”连接起来?
答:代码及演示效果如下
65.如何将数组(“ABC”,”A”,”CD”,”ABOUT”,”AND”,”END”)中含A的数值组成一个新数组?
答:筛选需要用到fliter函数,代码及演示效果如下:
-
VBA数组的排序
2021-09-13 16:12:32今天就好奇如果数组中实现排序 他是怎么实现的呢。 经过一番折腾查找,真是一看吓一跳,真是感觉蚂蚁看大象,发现排序分为: 今天仅整理了最简单的两种排序。。。 先来看下定义和实现的方法吧。 选择排序(Selection...我们平时用的表格排序,只相对来说是在在表格中的升序降序。今天就好奇如果数组中实现排序
他是怎么实现的呢。经过一番折腾查找,真是一看吓一跳,真是感觉蚂蚁看大象,发现排序分为:
今天仅整理了最简单的两种排序。。。
先来看下定义和实现的方法吧。选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
1.简单选择排序
Sub 选择排序() Dim i, j, MinIndex As Integer Dim MinValue As String arr = Range("a1:a10") For i = 1 To UBound(arr) MinValue = arr(i, 1) '将第一个值先默认为最小值 MinIndex = i '记录最小值的索引位置 For j = MinIndex + 1 To UBound(arr) If arr(j, 1) < MinValue Then MinValue = arr(j, 1) MinIndex = j End If Next '以此和当前的最小值做对比,比较出后面的最小值并记录 值及索引的位置 '因为小的值我们都放在最前面,所以遍历只需从当前值的后面开始就可以了,节省时间 If MinIndex > i Then arr(MinIndex, 1) = arr(i, 1) arr(i, 1) = MinValue End If '这里的MinIndex和i的关系会有些绕,只会有两个可能,一种是MinIndex > i(在默认最小值的后面有比当前还小的值),另一种MinIndex = i :(在最小值的后面没有找到比当前值的再小的)。 '【不出现MinIndex < i的情况,只为理解,加不加基本没有影响】 Next [b1].Resize(UBound(arr), 1) = arr End Sub
2.冒泡排序
原理:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
Sub 冒泡排序() arr = Range("a1:a10") For j = 1 To UBound(arr) For i = 1 To UBound(arr) - 1 If arr(i, 1) > arr(i + 1, 1) Then MinStr = arr(i + 1, 1) arr(i + 1, 1) = arr(i, 1) arr(i, 1) = MinStr End If Next Next j [b1].Resize(UBound(arr), 1) = arr End Sub
类别 说明 选择排序 缺点:不稳定,具体怎么不问题不知道。。优点:速度要比冒泡排序快很多 冒泡排序 缺点:速度很慢。。优点:稳定 太多了 ,其他的
-
VBA 数组合并 和 用dict 去重数组
2022-02-18 15:55:18Next 'dict1去重 For Each i In arr3 dict1(i) = "" Next '遍历字典 X = 1 For Each i In dict1.keys() ReDim Preserve arr4(1 To X) '每次改数组都要先redim redim 时记得一定要考虑是否 preserve !!! arr4(X) =... -
VBA数组VBA数组VBA数组
2010-07-14 23:15:29VBA数组VBA数组VBA数组VBA数组VBA数组 -
vba 数组填充单元格
2021-07-11 10:54:02Sub 数组填充单元格() Dim aaa(3, 3) Dim temp(0, 2) aaa(0, 0) = "姓名" aaa(0, 1) = "llll" aaa(0, 2) = "jjjj" aaa(1, 0) = "性别" aaa(1, 1) = "男" aaa(1, 2) = "女" aaa(2, 0) = "序号" aaa(2, 1) =... -
vba 数组 数组参数
2019-08-10 18:00:37关于赋值 我看了很多本书都没有看到这样子的,包括官方文档,所以我就写了下来。 sub a() dim a() dim c() ...a = array(1,2,3,4) '这里a后面的()可以给也可以不给 ...sub a(paramarray a() as variant) 'paramarray... -
VBA80 26集VBA数组之VBA排序算法(下).exe
2020-12-24 15:06:45VBA80 26集VBA数组之VBA排序算法(下) -
VBA 数组定义,赋值,一维数组
2019-12-19 13:35:431VBA数组的基础定义 1.1什么是数组? 就是一组数/字符等用同一个名字(这个名字就是:数组名),作为一个整体存储在一起 1.2什么是元素 这些被保存在同一个数组名下的,多个内容,称为element 元素 数组里的元素是... -
Excel·VBA数组冒泡排序函数
2022-04-21 22:36:13目录1,一维数组冒泡排序函数2,二维数组冒泡排序函数 1,一维数组冒泡排序函数 2,二维数组冒泡排序函数 -
获取vba数组元素个数
2022-04-02 21:12:13VBA中是 application.count(arr) -
VBA数组完全教程
2017-06-25 11:45:15兰色幻想VBA数组入门教程10集 1. 前言:不要把VBA数组想的太神秘,它其实就是一组数字而已。 2. 数组的维数: Sub 数组示例() Dim x As Long, y As Long Dim arr(1 To 10, 1 To 3) '创建一个可以容下10行... -
Excel VBA数组拓展列表(可以用作数据容器)
2021-04-18 14:36:31经过多次实验证明:VBA的数组起始标只能以1开始,否则无法转置 二、列表设计思路 利用类模块,当成对象开发; 生成数组是二维数组,每个维度的长度都可以通过参数设置; 通过行标列表添加... -
使用VBA数组
2020-03-10 11:29:25通过代码来理解VBA中数组 1 '定义一维数组并赋值 Sub test() Dim arr(1 To 4) arr(1) = "张三" arr(2) = "李四" arr(3) = "王五" End Sub '定义二维数组并赋值 Sub test1() Dim arr(1 To 4, 1 To 2) arr(1, 1) =... -
【VBA(十一):使用VBA数组】【认识数组+数组应用案例+小结】
2020-04-26 13:32:55本章主要内容:认识数组,数组应用案例,小结。 -
关于excel的vba数组
2022-04-06 14:09:57什么是vba数组?先让我们从字面来看一下它的意思:“数:数据;组:组合”。从字面很直观地看出,数组就是N个数据的组合,如果某个变量只包含一个数据,就不是数组,只能是一个普通的变量。 有人把数组比喻为一串用... -
vba数组如何精确筛选_第22讲:利用动态数组去除重复值的方法
2020-11-21 19:51:48大家好,我们今日继续讲解VBA数组与字典解决方案第22讲:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法。如果文本中含有大量的重复值,此时,如果我们要剔除重复值,该怎么办?用VBA的方法该如何做到... -
vba数组如何精确筛选_利用数组和字典,实现按指定规则的排序
2020-11-21 17:19:29随着字典讲解的深入,我们发现字典真的很神奇,在VBA代码中,给人以十分清爽的感觉,在这套数组与字典解决方案中,我会尽可能的把经常用到的实例多多讲解给大家,让大家对于字典的理解更加深入.虽然这块内容利用其它方案都... -
vba数组如何精确筛选_Filter函数和ReDim语句讲解,以及VBA中利用动态数组排重的方法一...
2020-11-22 00:03:13大家好,我们今日继续讲解VBA代码解决方案的第61讲内容:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法。在上一讲中我们讲了使用数组函数将单元格中的文本进行分隔后写入到工作表中的方法,那么问题... -
VBA数组和字典
2019-04-24 15:04:00转载自:http://www.cnblogs.com/wuzhiblog/p/vba_two.html 转载于:https://www.cnblogs.com/lybstudy/p/10762467.html -
VBA 数组列不同值统计
2011-04-24 20:23:36VBA 数组列不同值统计 VBA 数组列不同值统计 -
巧用公式实现VBA数组快速赋值
2020-07-03 06:44:53VBA中可以使用数组处理工作表中的数据,是个尽人皆知的秘密了,读取数据加载到数组中也很简单。 工作表中数据如下图所示,需要将B1:G1的内容加载到数组中。这个该如何弄到一个数组中呢,先分别读入数组,然后再使用... -
vba数组如何精确筛选_VBA数组与字典解决方案第8讲:为什么要采用数组公式(二)...
2020-11-22 00:03:26大家好,今日继续讲解VBA数组与字典解决方案,今日的内容是第8讲。在上一讲的数组专题中,我详细地讲了利用数组公式的好处,或许有的朋友还没有充分理解,今日继续给大家讲解。我在讲解中,力争每篇文章可以作为一个... -
VBA数组与单元格格式
2019-09-17 16:39:36 -
浅谈:excel的vba数组
2021-12-26 11:33:46什么是vba数组?先让我们从字面来看一下它的意思:“数:数据;组:组合”。从字面很直观地看出,数组就是N个数据的组合,如果某个变量只包含一个数据,就不是数组,只能是一个普通的变量。 有人把数组比喻为一串用... -
VBA示例之 数组按降序排列
2019-10-26 16:22:26VBA示例之 数组按降序排列,供初学者参考,大牛勿进~~~~~~~