|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
小花鹿 发表于 2012-7-23 02:23
凑个热闹:
Sub test()
Dim ar, br(), i&, j&, d
代码还可以这样改,一次循环就解决了。- Sub kagawa()
- Set d = CreateObject("Scripting.Dictionary") '定义字典d
-
- arr = Sheets(1).[a1].CurrentRegion '获取原始数据存入数组arr,范围可以自己修改
-
- ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2)) '定义结果数组brr,和原始数据范围一样大。
- For i = 2 To UBound(arr)
- For j = 2 To UBound(arr, 2) '按行开始逐列遍历原始数据
- If arr(i, j) <> "" Then '如果不为空
- t = d(arr(i, j)) '检查字典对应项目值(即结果数组brr中列位置序号)
- If t = "" Then k = k + 1: d(arr(i, j)) = k: t = k
- '如果字典中无此项目,则总序号+1,把该元素加入字典,然后列位置赋值
- brr(i, t) = arr(i, j) '把原始数据写入结果数组中新的对应列位置。
- End If
- Next
- Next
-
- [h1].Resize(UBound(arr), d.Count) = brr '输出结果到同一工作表
- Sheets(2).[a1].Resize(UBound(arr), d.Count) = brr '或者输出结果到工作表2
- End Sub
复制代码 小花鹿看一下这个代码算法怎么样? 更高效、更快捷。
|
|