新闻资讯
Cells(maxrow
发布日期:2024-06-21 14:54    点击次数:65
 

Cells(maxrow

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我的个东谈主藏书楼稽查。

本站仅提供存储就业,总计骨子均由用户发布,如发现存害或侵权骨子,请点击举报。