vba 定义动态二维数组(vba定义动态数组)
你好。 今天,我们将继续讨论第22届VBA数组和词典解决方案,以及如何在VBA中使用动态数组和使用动态数组消除重复值。 如果文本中包含大量重复值,此时该如何排除重复值? 用VBA的方法该怎么办? 我在这个讲稿和下面的讲稿中解答这个问题,给读者提供可以测试的实例。 今天先说一下这个内容要用到的知识点。
(过滤器函数)此函数返回一个数组,其中包含基于指定过滤器条件的字符串数组的子集,后缀从零开始。 语法如下: 过滤器(源光线,匹配[ (,包括[,比较] ] ) )
参数
a ) sourcesrray是必需的,是执行搜索的一维字符串数组。
b ) match是必需的,是要搜索的字符串。
c ) include是可选的布尔值,指示返回的子字符串是否包含匹配字符串。 如果参数include为True,则Filter函数返回数组的子集,该数组包含match参数的子字符串。 如果参数include为False,则Filter函数返回不包含match参数子字符串的数组的子集。
d )比较是可选的,使用字符串比较类型。
)2) ReDim语句。 此语句在过程级别使用,用于重新分配动态数组变量的存储。 语法如下:
redim [保留] varname [预订类型] [,预订] [预订类型]
参数
a ) Preserve是可选的关键字,用于在调整原始数组的最终维的大小时保留数组中的原始数据。
b ) varname是必需的,是变量的名称。
c )需要订阅。 数组变量的维数最多可以定义60维的多维数组。 使用以下语法: “lower to”上传器
使用动态数组从文本中删除重复的值,如以下代码所示。
Sub MyNZsz_5() )利用第22次数组排序的方法
Dim Splarr ()和字符串
Dim Arr ()和字符串
Dim Temp ()和字符串
dim r as整合器
dim I as集成器
错误恢复下一步
splarr=剥离(sheets (22 ).range ) ) a1),) )
fori=0to ubound (喷溅) )。
temp=过滤器(风暴I ) )
if ubound (温度)0 Then
r=r 1
redimpreservearr(1tor ) )
ARR(r )=散热器(I ) I ) ) )。
终点国际机场
下一个
sheets(22 ) ).range ) a5).Resize(r,1 )=应用程序.传输(arr ) ) ) ) ) ) ) ) ) )。
最终辅
代码分析:
MySplitarr过程将工作表sheets'22 '的A1单元格中的文本写入工作表sheets'22 '的a列中,不包括重复值。
第二行代码声明数组Splarr用于保存Sheets('22 '的A1单元格中的文本)。
第三行的代码声明数组Arr用于保存排除重复值的文本。
第四行的代码声明数组Temp用于确定文本是否重复。
第五行的代码声明变量r用于保存文本的数量,不包括重复值。
第7行代码启动错误处理程序并忽略错误。 因为如果执行程序到第11行的代码,将会发生下标越界错误。
在第八行代码中,使用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函数替换掉重复值的文本,并将其写入工作表的单元格。
代码的屏幕快照:
运行前的屏幕快照:显然有很多重复的数字:
运行后的屏幕快照:
今天的内容如下
1上述代码清楚了其执行过程吗?
为什么第二行代码会启动错误处理程序而忽略错误呢?
一分快三大小单双技巧> dim I as集成器错误恢复下一步
splarr=剥离(sheets (22 ).range ) ) a1),) )
fori=0to ubound (喷溅) )。
temp=过滤器(风暴I ) )
if ubound (温度)0 Then
r=r 1
redimpreservearr(1tor ) )
ARR(r )=散热器(I ) I ) ) )。
终点国际机场
下一个
sheets(22 ) ).range ) a5).Resize(r,1 )=应用程序.传输(arr ) ) ) ) ) ) ) ) ) )。
最终辅
代码分析:
MySplitarr过程将工作表sheets'22 '的A1单元格中的文本写入工作表sheets'22 '的a列中,不包括重复值。
第二行代码声明数组Splarr用于保存Sheets('22 '的A1单元格中的文本)。
第三行的代码声明数组Arr用于保存排除重复值的文本。
第四行的代码声明数组Temp用于确定文本是否重复。
第五行的代码声明变量r用于保存文本的数量,不包括重复值。
第7行代码启动错误处理程序并忽略错误。 因为如果执行程序到第11行的代码,将会发生下标越界错误。
在第八行代码中,使用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函数替换掉重复值的文本,并将其写入工作表的单元格。
代码的屏幕快照:
运行前的屏幕快照:显然有很多重复的数字:
运行后的屏幕快照:
今天的内容如下
1上述代码清楚了其执行过程吗?
为什么第二行代码会启动错误处理程序而忽略错误呢?