VBA宏的问题
在表的a列有一俩万条数据都是1234675494这种类型的,现在想找出来并在它前面添加字母使它不重复,我用我写的方法但是都很慢有时候甚至卡死,有没有更高手帮我写一个效率高...
在表的a列有一俩万条数据都是1234675494这种类型的,现在想找出来并在它前面添加字母使它不重复,我用我写的方法但是都很慢有时候甚至卡死,有没有更高手帮我写一个效率高点的代码,红色的是想要的效果
展开
2个回答
展开全部
你没有贴出你的代码,猜测你慢是因为两个原因:一是没有使用数组,大量的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
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询