Redim方法其实我在上篇文章中已经用过,是用来调整动态数组的大小,因为我们有时候在用数组的时候,是不知道需要多大的数组的,而且Dim定义数组大小的时候是不支持变量的,所以这时候需要用到Redim。

例一:用数组实现依次将下表中数据依次存放到E列

代码如下:

Sub test()    Dim arr    Dim brr()    arr = [A1].CurrentRegion    ReDim brr(1 To UBound(arr) * UBound(arr, 2), 1 To 1)'定义brr数组的大小    n = 1    For i = 1 To UBound(arr)        For j = 1 To UBound(arr, 2)            brr(n, 1) = arr(i, j)            n = n + 1        Next    Next    [E1].Resize(UBound(brr), 1) = brrEnd Sub

从例一中可以看出,在程序运行前,我们是不知道数据的个数,所以需要用到Redim,定义数组brr的大小。

Redim方法还有个可选参数 Preserve ,用来保留数组原数据,因为如果不加 Preserve 的话,每次Redim后,数组中的数据将被清空,有时候我们需要在保留原数据的同时扩充数组,就必须加上 Preserve

例二:如图,有一列数据,用数组实现将其中大于50的数取出,存放到E列

代码如下:

Sub test()    Dim arr    Dim arr2()    Dim n%    arr = [A1].CurrentRegion    n = 0    For i = 1 To UBound(arr)        If arr(i, 1) > 50 Then            n = n + 1'统计符合条件的值得个数,            ReDim Preserve arr2(1 To n)'调整数组arr2的大小,并且保留原有数据            arr2(n) = arr(i, 1)        End If    Next    [D1].Resize(n, 1) = Application.Transpose(arr2)End Sub

Excel VBA 之 统计词汇出现次数Sub test() Dim arr Dim arr2() Dim n% arr = [A1].CurrentRegion n = 0 For i = 1 To UBound(arr) If arr(i, 1) > 50 Then n = n + 1'统计符合条件的值得个数, ReDim Preserve arr2(1 To n)'调整数组arr2的大小,并且保留原有数据 arr2(n) = arr(i, 1) End If Next [D1].Resize(n, 1) = Application.Transpose(arr2) End Sub

ReDim Preserve在使用时有以下注意点:

  1. 只能通过更改 上限 来更改数组大小;更改 下限 会导致错误
  2. 只能调整 最后一个数组维度 的大小,并且无法更改 维度数目
    这样做是错误的:ReDim Rreserve arr(1 to n,1 to 2)
    应该这样: ReDim Preserve arr(1 to 2,1 to n)
    如果需要调整第1维大小,那就要先扩充第2维,然后用Application.Transpose转置一下就可以了。

大家可以点开下面链接,查看我的其他文章哦!

848个Excel VBA 实用技巧,实例+详细解析,入门必看,建议收藏

Excel VBA 之 数组的优点及应用

Excel VBA 之 统计词汇出现次数

Excel VBA 之 去除重复项

Excel VBA 之 自动建立工作表目录

Excel VBA 之 将txt文档批量导入至Excel

喜欢本文章的朋友记得收藏、点赞、关注哦,网友们如果在Excel中遇到问题都可以找我交流,也可以在评论区或私信告诉我你想看到的VBA办公教程,我将在下期分享给大家,以后不定期更新Excel VBA技巧!

for (let i = 0; i < arr.length; i++) { if (brr.indexOf(arr[i]) == -1) { brr.push(arr[i]) //判断在brr 数组 中是否存在,不存在则push到brr 数组 中 console.log('brr',brr) indexOf() 方法 可返回 本文实例讲述了C#动态调整 数组 大小的 方法 。分享给大家供大家参考。具体如下: 通常,我们创建一个 数组 后就不能调整其长度,但是Array类提供了一个静态 方法 CreateInstance用来创建一个动态 数组 ,所以我们可以通过它来动态调整 数组 的长度。 namespace ArrayManipulation Class Program static void Main (String[] args) int[] arr = new int[]{1,2,3}; PrintArr(arr); arr = (int[]) Redi m(arr,5); Print C++输入多行数字到 数组 前天做某公司笔试题的时候,其输入格式是多行数字,每行以空格为分隔符,以换行符号为结束输入到多个 数组 。在JAVA中有相应的函数直接将一行拆成 数组 ,感觉在C++中这中输入方式还是挺奇怪的,今天想出一种解决方式。 每次读入一个字符,判断是不是EOF,如果是的话跳出循环; 不是EOF将字符放回缓冲区; 读入换行符,说明一行结束,处理 数组 ; 读入字符,如果不是空格,存入一个临时的字符串; 如果是空格,字符串转换成整数并压入 数组 ; 对于连续的空格输入要进行判断,否则会输入一堆0; 在读入换行符的时候要将最后的临时字符串存进 数组 ; #include<ios 创建ndarray 创建 数组 最简单的 方法 就是使用array函数。它接收一切序列型的对象(包括其他 数组 ),然后产生一个新的含有传入数据的Numpy 数组 。 array函数创建 数组 import numpy as np ndarray1 = np.array([1, 2, 3, 4]) ndarray2 = np.array(list('abcdefg')) ndarray3 = np.array([[11, 22, 33, 44], [10, 20, 30, 40]]) zeros和zeros (1)空间分配 指针是动态分配空间,通过malloc在堆上分配所需要的空间,分配的空间不一定连续,在使用完之后需要调用free()来释放分配空间。而 数组 是静态分配空间,在全局变量区或者栈 上分配空间,分配的空间是连续的,局部变量在生命周期结束后自动释放,全局变量在程序结束完自动释放。 (2)访问效率 指针是通过地址间接访问,而 数组 是直接访问数值。因此指针的访问效率低, 数组 的访问效率高。 字符串超出索引 范围 6 如何解决小编做过最屌的是站在班主任面前唱《考试什么的都去死吧》说明你的字符串长度当前length属性小于5如何摆脱字符串索引超出 范围 一个人太久都带着假面生活,会渐渐忘了自己本来的样子。select top "+5+" * from product where product_id not in "+"( select两个人之间的感觉,只靠你一个人在苦苦维系,想放弃而下不了决定... 备注:个人小技巧(不知道准不准),从列表转 数组 时,确定 数组 维度 的话可以看一开始中括号的个数,几个中括号就是几维。 shape函数:返回一个元组,确定各个 维度 的元素个数 对于arr11:它是一个一维 数组 ,返回的(4,)代表一维里面有四个元素 对于arr22:它是一个二维 数组 ,返回的(2,3)中 2 代表的是行(row),代表一维里面有2个元素,3代表的是列(c