Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 2534|回复: 14

[已解决]如何实现批量更改

[复制链接]
发表于 2013-4-9 19:03 | 显示全部楼层 |阅读模式
如何实现批量更改数据,具体见附件
最佳答案
2013-4-9 20:57
本帖最后由 zjdh 于 2013-4-9 20:59 编辑
  1. Sub TEST()
  2.     For I = 1 To Cells(65536, 1).End(3).Row
  3.         Set D = CreateObject("scripting.dictionary")
  4.         S = Split(Cells(I, 1), "-")
  5.         For J = 0 To UBound(S)
  6.             If Not D.exists(S(J)) Then
  7.                 D(S(J)) = 0
  8.             Else
  9.                 D(S(J)) = D(S(J)) + 1
  10.             End If
  11.         Next
  12.         K = D.KEYS
  13.         For J = 0 To UBound(K)
  14.             If D(K(J)) <> 0 Then D(K(J)) = D(K(J)) + 1
  15.         Next
  16.         For L = UBound(S) To 0 Step -1
  17.             If D(S(L)) > 0 Then
  18.                 N = S(L)
  19.                 S(L) = S(L) & "." & D(S(L))
  20.                 D(N) = D(N) - 1
  21.             End If
  22.         Next
  23.         Cells(I, 1) = Join(S, "-")
  24.     Next
  25. End Sub
复制代码

批量更改.zip

6.13 KB, 下载次数: 11

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-4-9 19:38 | 显示全部楼层
你要用VBA实现吗  
2.1-3-2.2-5.1-6-5.2-8-11
6.1-5-6.2-8.1-9-8.2-11
这是你举的例子  为什么8不变成8.1  11不变成11.1  11.2的形式
还有  是不是没有出现重复 就不这样变?
回复

使用道具 举报

 楼主| 发表于 2013-4-9 19:58 | 显示全部楼层
1032446692 发表于 2013-4-9 19:38
你要用VBA实现吗  
2.1-3-2.2-5.1-6-5.2-8-11
6.1-5-6.2-8.1-9-8.2-11

出现重复的数字才改变
回复

使用道具 举报

发表于 2013-4-9 20:17 | 显示全部楼层
fengdavid 发表于 2013-4-9 19:58
出现重复的数字才改变

那你自己在认真看一下你的例子吧   反正就那么几个  你认真一点  不要出错  你说第一次出现就在后面加.1但是,你有的没加   你又说  重复了才加   但是有的第一次出现又加了    如果你觉得我说的你难以理解  你就仔细看一下你的例子  我觉得也很难理解
回复

使用道具 举报

发表于 2013-4-9 20:37 | 显示全部楼层
答案1:2.1-3.1-2.2-5.1-6.1-5.2-8.1-11.1
6.2-5.3-6.3-8.2-9.1-8.3-11.2
答案2:2-3-2.1-5-6-5.1-8-11
6.1-5.2-6.2-8.1-9-8.2-11.1
我认为你要么是第一种答案  要么是第二种答案
如果是你实力的那样   就没有规律了  你就值得用手工修改了
回复

使用道具 举报

发表于 2013-4-9 20:57 | 显示全部楼层    本楼为最佳答案   
本帖最后由 zjdh 于 2013-4-9 20:59 编辑
  1. Sub TEST()
  2.     For I = 1 To Cells(65536, 1).End(3).Row
  3.         Set D = CreateObject("scripting.dictionary")
  4.         S = Split(Cells(I, 1), "-")
  5.         For J = 0 To UBound(S)
  6.             If Not D.exists(S(J)) Then
  7.                 D(S(J)) = 0
  8.             Else
  9.                 D(S(J)) = D(S(J)) + 1
  10.             End If
  11.         Next
  12.         K = D.KEYS
  13.         For J = 0 To UBound(K)
  14.             If D(K(J)) <> 0 Then D(K(J)) = D(K(J)) + 1
  15.         Next
  16.         For L = UBound(S) To 0 Step -1
  17.             If D(S(L)) > 0 Then
  18.                 N = S(L)
  19.                 S(L) = S(L) & "." & D(S(L))
  20.                 D(N) = D(N) - 1
  21.             End If
  22.         Next
  23.         Cells(I, 1) = Join(S, "-")
  24.     Next
  25. End Sub
复制代码
回复

使用道具 举报

发表于 2013-4-9 21:03 | 显示全部楼层
1032446692 发表于 2013-4-9 20:37
答案1:2.1-3.1-2.2-5.1-6.1-5.2-8.1-11.1
6.2-5.3-6.3-8.2-9.1-8.3-11.2
答案2:2-3-2.1-5-6-5.1-8-11

是每一个单元为一组数,出现重复则全部修改,楼主的示例就是这个意思。
回复

使用道具 举报

发表于 2013-4-9 21:05 | 显示全部楼层
批量更改.rar (9.38 KB, 下载次数: 4)
回复

使用道具 举报

 楼主| 发表于 2013-4-9 21:44 | 显示全部楼层
zjdh老师理解正确,代码也很好,实现了要求。谢谢!
回复

使用道具 举报

发表于 2013-4-9 21:46 | 显示全部楼层
我也弄了一下,看好用不。

批量更改.rar

13.76 KB, 下载次数: 1

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 21:14 , Processed in 0.384205 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表