摘要:《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。
《VBA数组与字典方案》教程(10144533)是我推出的第三套教程,目前已经是第二版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。7.1.3.9教程和手册掌握后,可以解决大多数工作中遇到的实际问题。
这套字典教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数值与字典解决方案第二十五讲:数组的合并(Join)拆分(Split)及筛选(Filter)
【分享成果,随喜正能量】101 万事万物皆有宿命,因果有轮回,善恶终有报。为人善良,会得到善果;为人恶毒,会得到恶果。人世间的因果报应,只是早晚的事。。
大家好,我们今日继续讲解VBA数组与字典解决方案第25讲:数组的合并拆分及筛选的应用。这讲的内容中拆分(Split)及筛选(Filter)两个函数在我之前的章节中已经讲过了,这里仅仅再次提出一下。
1 Join函数说明此函数返回一个字符串,该字符串是通过连接某个数组中的多个子字符串而创建的。
语法如下:Join(sourcearray[, delimiter])
参数sourcearray是必须的,包含被连接子字符串的一维数组。
参数delimiter是可选的,在返回字符串中用于分隔子字符串的字符,如果忽略则使用空格(" ")来分隔子字符串。则列表中的所有项目都连接在一起,中间没有分隔符。
2 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只能对一维数组进行操作。
3 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(数组, 筛选的字符, 是否包含)
遗憾的是函数只能进行模糊筛选,不能精确匹配。
4 数组函数的实例应用及讲解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
代码截图:
代码讲解:
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) 配合转置函数输出数组
下面看代码的输出结果:
今日内容回向:
1 JOIN FILTER SPLIT 的意义是什么?
2 上面的三个函数都可以返回数组吗?
我多年的VBA实践经验,全部浓缩在以下教程中:
来源:VBA语言专业教育