您的位置 首页 php

VBA数组与字典解决方案第25讲:数组的合并拆分及筛选的应用

大家好,我们今日继续讲解 VBA 数组与字典解决方案第25讲:数组的合并拆分及筛选的应用。这讲的内容中拆分(Split)及筛选(Filter)两个函数在我之前的章节中已经讲过了,这里仅仅再次提出一下。

一Join函数:此函数返回一个 字符串 ,该字符串是通过连接某个数组中的多个子字符串而创建的,语法如下:Join(sourcearray[, delimiter])

参数sourcearray是必须的,包含被连接子字符串的一维数组。

参数delimiter是可选的,在返回字符串中用于分隔子字符串的字符,如果忽略则使用空格(” “)来分隔子字符串。则列表中的所有项目都连接在一起,中间没有分隔符。

二:split函数:这个函数的讲解在之前已经讲过,是拆分字符串的函数,返回一个下标从零开始的一维数组,包含指定数目的子字符串,语法如下:

Split(expression[, delimiter[, limit[, compare]]])

参数expression是必须的,包含子字符串和分隔符的字符串表达式。

参数delimiter是必须的,用来标识子字符串边界的字符串字符。如果忽略,则使用空格字符(” “)作为分隔符。

多个字符的合并和字符串按规律的拆分是经常遇到的,例如:A-REW-E-RWC-2-RWC 按分隔符”-“拆分成6个字符放在一个数组中;有一组数array(23,45,7,1,76)想用分隔符-连接成一个字符串。上面两种情况的实现即用到:split(字符串,”分隔符”) 拆分字符串。join(数组,”分隔符”) 用分隔连接数组的每个元成一个字符串

值得注意的是:split和join只能对一维数组进行操作。

三:Filter函数:返回一个下标从零开始的数组,该数组包含基于指定筛选条件的一个字符串数组的子集。filter()是数组的一个常用操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。

语法:Filter(sourcesrray, match[, include [, compare]])

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

match必须的。要搜索的字符串。

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

compare可选的。数字值,表示所使用的字符串比较类型。

Filter函数实现数组筛选:数组的筛选就是根据一定的条件,从数组中筛选符合条件的值,组成一个新的数组,实现数组筛选的Filter函数用法:Filter(数组, 筛选的字符, 是否包含)

遗憾的是函数只能进行模糊筛选,不能精确匹配。

实例讲解:

Sub MyNZsz_25() ‘第25讲

myst = “A-REW-E-RWC-2-RWC” ‘myst是字符串

arr = Split(myst, “-“) ‘arr是数组,Split返回的是一维数组

[a:e].ClearContents

[a1].Resize(UBound(arr) + 1) = WorksheetFunction.Transpose(arr)

Range(“b1”) = Join(arr, “,”) ‘Join 返回的是字符串

arr1 = Array(“ABC”, “A”, “D”, “J”, “CA”, “ER”) ‘arr1是数组,是用Array建立的

Range(“c1”).Resize(UBound(arr1) + 1) = WorksheetFunction.Transpose(arr1)

myst1 = Filter(arr1, “A”, True) ‘myst1为数组,Filter 返回的是数组

[d1].Resize(UBound(myst1) + 1) = WorksheetFunction.Transpose(myst1)

myst2 = Filter(arr1, “A”, False)

[e1].Resize(UBound(myst2) + 1) = WorksheetFunction.Transpose(myst2)

End Sub

代码截图:

de75a3a0d3d94ad3b187cdb78561c24b

代码讲解:

1 myst = “A-REW-E-RWC-2-RWC” ‘myst是字符串

arr = Split(myst, “-“) ‘arr是数组,Split返回的是一维数组

[a:e].ClearContents’ 清零A列到E列

[a1].Resize(UBound(arr) + 1) = WorksheetFunction.Transpose(arr)’配合转置函数输出数组

Range(“b1”) = Join(arr, “,”) ‘Join 返回的是字符串

2 arr1 = Array(“ABC”, “A”, “D”, “J”, “CA”, “ER”) ‘arr1是数组,是用Array建立的

Range(“c1”).Resize(UBound(arr1) + 1) = WorksheetFunction.Transpose(arr1)

myst1 = Filter(arr1, “A”, True) ‘myst1为数组,Filter 返回的是数组,是一个含”A”的数组

[d1].Resize(UBound(myst1) + 1) = WorksheetFunction.Transpose(myst1) 配合转置函数输出数组

下面看代码的输出结果:

a874def3432242c9938842033a353f09

今日内容回向:

1 JOIN FILTER SPLIT 的意义是什么?

2 上面的三个函数都可以返回数组吗?

e8dc4c96ac274f57a52685cda130ca20

文章来源:智云一二三科技

文章标题:VBA数组与字典解决方案第25讲:数组的合并拆分及筛选的应用

文章地址:https://www.zhihuclub.com/31407.shtml

关于作者: 智云科技

热门文章

网站地图