VBA数组去重
vba想要给数组去重,可以通过获取数组里的一个元素放入新数组,之后用Filter函数将原数组里的相同名称元素剔除,再提取下一个元素再剔除,循环重复直至原数组为空,这样得到的新数组就是剔除重复值后的数组。
以下举例用vba给数组【"番茄", "香蕉", "小番茄", "香蕉", "番茄", "提子"】去除重复值:
Sub 数组去重() arr1 = Array("番茄", "香蕉", "小番茄", "香蕉", "番茄", "提子") '待去重数组 Dim arr2() As Variant '建立动态数组,作为去重后数据存放的数组 iCounter = 0 '“去重数组”的待用下标 aa = "@" '第一种特殊字符 bb = "#" '第二种特殊字符 arr1 = Split(bb & Join(arr1, bb & aa & bb) & bb, aa) '给“待去重数组”数组里所有元素前后添加“#” Do element = arr1(0) '获取“待去重数组”里的第一个元素 ReDim Preserve arr2(iCounter) '重新定义动态数组大小 arr2(iCounter) = element '给“去重数组”添加该元素 iCounter = iCounter + 1 arr1 = VBA.Filter(arr1, element, False) '“待去重数组”剔除所有element元素 Loop While Join(arr1, "") <> "" '当“待去重数组数组”为空时退出循环 arr = Split(Replace(Join(arr2, aa), bb, ""), aa) '剔除“去重元素存放数组”所有数组元素中的“#” MsgBox Join(arr, ",") '用“,”串联数组所有元素查看结果 End Sub
以上代码得到的去重数组就是【"番茄", "香蕉", "小番茄", "提子"】。
需要注意的是,原数组在进行获取元素放入新数组前,要先对所有数组元素进行前后加特殊符号“保护”,原因是Filter函数的筛选是模糊匹配,想要精确匹配就要对数组元素预处理(方法解析详见我的文章【VBA用Filter精确匹配筛选或剔除数组元素】),注意选择的两种特殊字符必须是在数组元素中没有出现的符号。在去重循环结束后还要对去重后的数组清除预处理时添加的特殊符号(方法解析详见我的文章【VBA去除数组元素中的特定字符串】)。
以上内容对您有帮助可以分享或转藏,避免以后找不到。想要了解更多VBA相关知识,欢迎到http://moqingyan.360doc.com我的个人图书馆查看。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。