VBA宏的问题

2025-05-22 01:43:21
推荐回答(2个)
回答1:

你没有贴出你的代码,猜测你慢是因为两个原因:一是没有使用数组,大量的Range或者Cells存取单元格,二是没有使用字典,使用双重循环来检查是否重复。改变就针对这两点进行,如果你已经采取了这两条,那就要看看你代码其它地方是否有不合理的。

只有你贴出代码才可能进一步优化,直接给的代码可能和你的差不多,不一定能解决关键的地方。

按照你的例子,我给出下面的代码,你可以试试看,几十万数据应该一分钟能完成,当然这一分钟不要乱点鼠标,否则位“未响应的”

处理前:

处理后:

代码:

Option Explicit

Sub 宏1()
    Dim arr, num, n, i, db
    Set db = CreateObject("Scripting.Dictionary")
    arr = ActiveSheet.UsedRange '工作表数据存入数组
    For i = 1 To UBound(arr)
        num = Trim(arr(i, 1))
        n = db(num) + 1
        db(num) = n
        If n > 1 Then arr(i, 1) = Chr(63 + n) & num
    Next i
    ActiveSheet.UsedRange = arr '数组写入工作表
End Sub

回答2:

没说清楚啊,麻烦你截图看下数据。