你的位置:首页-和西东皮革有限公司 > 新闻资讯 >
"
发布日期:2024-06-26 16:26 点击次数:143
vba提真金不怕火某列不叠加的数据放入数组,底下例如得到下图excel第1列不叠加数据的3种身手:
图片
身手1:搜检不叠加试验放入数组
Sub 不叠加试验放入数组() maxrow = ActiveSheet.UsedRange.Rows.Count '现时行径责任表的行长 Dim arr() As Variant '诱惑动态数组 iCounter = 0 '数组的待用下标 aa = "#" '第一种特殊字符,留意必须是数组中莫得的字符 For Row = 1 To maxrow element = Cells(Row, 1) '得到现时行的元素 mergestring = aa & Join(arr, aa) & aa '吞并数构成字符串 If InStr(mergestring, aa & element & aa) = 0 Then '搜检现时元素是否在数组中存在,不存在则将该元素放入数组 ReDim Preserve arr(iCounter) '从头界说动态数组大小 arr(iCounter) = element '给数组添加该元素 iCounter = iCounter + 1 End If Next MsgBox Join(arr, ",") '用“,”串联数组通盘元素稽察适度 End Sub
以上代码的旨趣是通过遍历列试验,搜检到数组中莫得该列试验则放入数组中。留意特殊标志“#”的作用是在检测元素是否在数组中时作标记区别,是以其必须是数组元素中莫得的字符(旨趣详见我的著述【VBA判断元素是否在数组中】)
身手2:专揽字典去重
Sub 专揽字典去重数组() Set dict = CreateObject("scripting.dictionary") '创建字典 maxrow = ActiveSheet.UsedRange.Rows.Count '现时行径责任表的行长 For Row = 1 To maxrow Key = Cells(Row, 1) dict(Key) = "" '数据放入字典(在际遇探究的键赋值时,不会新增键,首页-大利词皮具有限公司而是替换原本的键对应的值) Next arr = dict.Keys() '将字典的通盘键放入数组 MsgBox Join(arr, 克山县利南服务器有限公司 ", 深圳市健马科技发展有限公司") '用“,”串联数组通盘元素稽察适度 End Sub
以上代码是专揽字典中的键值不会叠加的旨趣,遍历列试验当作键值放入字典【使用d("x") = ""莫得x键会加多,已有x键会替换】,已矣去重的后果
身手3:使用Filter函数去重
聚合物 bb, "") '给“去重数组”添加该元素(同时剔除元素中的“#”) iCounter = iCounter + 1 End If arr1 = VBA.Filter(arr1, element, False) '“待去重数组”剔除所有element元素 Loop While Join(arr1, "") <> "" '当“待去重数组数组”为空时退出循环 MsgBox Join(arr2, ",") '用“,”串联数组所有元素查看结果 End Sub" cm-theme="neo" cm-mode="VB.NET">Sub Filter函数去重数组() maxrow = ActiveSheet.UsedRange.Rows.Count '现时行径责任表的行长 arr1 = WorksheetFunction.Transpose(Range(Cells(1, 1), Cells(maxrow, 1))) '单位格区域放入“待去重”数组 Dim arr2() As Variant '诱惑动态数组,当作去重后数据存放的数组 iCounter = 0 '“去重数组”的待用下标 aa = "@" '第一种特殊字符 bb = "#" '第二种特殊字符 arr1 = Split(bb & Join(arr1, bb & aa & bb) & bb, aa) '给“待去重数组”数组里通盘元素前后添加“#” Do element = arr1(0) '得到“待去重数组”里的第一个元素 If element <> bb & bb Then '要是数组元素不为空时,则放入“去重数组”数组 ReDim Preserve arr2(iCounter) '从头界说动态数组大小 arr2(iCounter) = Replace(element, bb, "") '给“去重数组”添加该元素(同期剔除元素中的“#”) iCounter = iCounter + 1 End If arr1 = VBA.Filter(arr1, element, False) '“待去重数组”剔除通盘element元素 Loop While Join(arr1, "") <> "" '当“待去重数组数组”为空时退出轮回 MsgBox Join(arr2, ",") '用“,”串联数组通盘元素稽察适度 End Sub
以上代码的旨趣是将原数组里的一个元素放入新数组,之后用Filter函数将原数组里的探究称呼元素剔除,再提真金不怕火下一个元素再剔除,轮回叠加直至原数组为空,这么得到的新数组便是剔除叠加值后的数组。
需要留意的是,原数组在进行得到元素放入新数组前,要先对所出奇组元素进行前后加特殊标志“保护”,原因是Filter函数的筛选是朦胧匹配,念念要精准匹配就要对数组元素预管制(身手理解详见我的著述【VBA用Filter精准匹配筛选或剔除数组元素】),留意选定的两种特殊字符必须是在数组元素中莫得出现的标志。
第三种身手天然代码复杂些,然则速率会比前两种快,因为它不需要遍历通盘列试验,是以妥当在数据很是多的技能使用。
以上试验对您有匡助不错共享或转藏聚合物,幸免以后找不到。念念要了解更多VBA关系学问,迎接到http://moqingyan.360doc.com我的个东谈主藏书楼稽察。
本站仅提供存储事业,通盘试验均由用户发布,如发现存害或侵权试验,请点击举报。