VBA宏的问题

在表的a列有一俩万条数据都是1234675494这种类型的,现在想找出来并在它前面添加字母使它不重复,我用我写的方法但是都很慢有时候甚至卡死,有没有更高手帮我写一个效率高... 在表的a列有一俩万条数据都是1234675494这种类型的,现在想找出来并在它前面添加字母使它不重复,我用我写的方法但是都很慢有时候甚至卡死,有没有更高手帮我写一个效率高点的代码,红色的是想要的效果 展开
 我来答
阳光上的桥
2019-05-17 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21424 获赞数:65808
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部

你没有贴出你的代码,猜测你慢是因为两个原因:一是没有使用数组,大量的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
更多追问追答
追问

你这个代码怎么改指定一个工作簿运行呢?另外如果有时间帮我看看我的代码是哪里出问题了

追答

单个工作簿成功了吗?改为所有工作簿可以使用循环实现:

Option Explicit
 
Sub 宏1()
    Dim arr, num, n, i, db, st
    Set db = CreateObject("Scripting.Dictionary")
    For Each st In Sheets
        db.RemoveAll
        st.Activate
        arr = st.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
        st.UsedRange = arr '数组写入工作表
    Next st
End Sub
鞠婧祎老婆柠祎
2019-05-16 · TA获得超过727个赞
知道小有建树答主
回答量:2416
采纳率:67%
帮助的人:409万
展开全部
没说清楚啊,麻烦你截图看下数据。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式