Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: ATCkongguan

[已解决]excel高级替换,部分替换匹配的内容,内含excel文件

[复制链接]
发表于 2017-2-6 09:23 | 显示全部楼层
上附件,多点数据。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
回复

使用道具 举报

 楼主| 发表于 2017-2-6 09:46 | 显示全部楼层
grf1973 发表于 2017-2-6 09:23
上附件,多点数据。

谢谢您的帮助,由于涉及隐私,我截取了一部分原文件,数据量应该够了。谢谢您

终极替换---求助(带数据).zip

32.16 KB, 下载次数: 5

谢谢您的帮助,太感谢啦

回复

使用道具 举报

发表于 2017-2-6 13:54 | 显示全部楼层
  1. Sub 替换()
  2.     Dim arr
  3.     Set d = CreateObject("scripting.dictionary")      '正向
  4.     Set dr = CreateObject("scripting.dictionary")    '反向
  5.     arr = Range("d2:e" & [e65536].End(3).Row)
  6.     For i = 1 To UBound(arr)
  7.         xrr = Split(Trim(arr(i, 2)), " ")
  8.         y = ""
  9.         For k = UBound(xrr) To 0 Step -1
  10.             y = y & " " & xrr(k)
  11.         Next
  12.         x = Trim(arr(i, 1))
  13.         d(x) = Trim(arr(i, 2))
  14.         dr(x) = Mid(y, 2)
  15.     Next
  16.    
  17.     arr = Range("a1:c" & [a65536].End(3).Row)
  18.     With CreateObject("vbscript.regexp")
  19.         .Global = True
  20.         For i = 2 To UBound(arr)
  21.             x = arr(i, 2)
  22.             a = Split(x, " ")
  23.             For j = 0 To UBound(a)
  24.                 s = Trim(a(j))
  25.                 If d.exists(s) Then
  26.                      ks = a(j - 1): js = a(j + 1)
  27.                     .Pattern = ks & "( .+ )" & js
  28.                     If .test(d(s)) Then
  29.                         Set mh = .Execute(d(s))
  30.                         fx = "正向"
  31.                     Else
  32.                         Set mh = .Execute(dr(s))   '如果正向没有,反向查找一遍
  33.                         fx = "反向"
  34.                     End If
  35.                     If mh.Count = 0 Then
  36.                         arr(i, 3) = "未替换"      'x
  37.                     Else
  38.                         xstr = Trim(mh(0).submatches(0))
  39.                         arr(i, 3) = s & fx & ":" & Replace(x, s, xstr)
  40.                         Exit For
  41.                     End If
  42.                 End If
  43.             Next
  44.         Next
  45.     End With
  46.     Range("a1:c" & [a65536].End(3).Row) = arr
  47. End Sub
复制代码

高级替换---求助(带数据).rar

55.08 KB, 下载次数: 11

回复

使用道具 举报

 楼主| 发表于 2017-2-6 15:08 | 显示全部楼层

谢谢您的帮助[em17]!
回复

使用道具 举报

 楼主| 发表于 2017-2-6 15:50 | 显示全部楼层

大神您好,批量替换的程序非常好用,但是我手里的数据过于杂乱且没有规律,替换起来难度异常大。  见图(循环批量替换后还是有道路没有替换成点串,而且循环替换过程容易漏掉一些未替换道路)。  因此我想到的解决方法是在正反向替换基础上,请您做一步改进,我再手工完成一部分。实在抱歉,还要再麻烦您一下。

替换出现问题

替换出现问题

新的想法

新的想法

高级替换---求助(人工输入正反向替换).zip

16.32 KB, 下载次数: 4

回复

使用道具 举报

发表于 2017-2-6 16:34 | 显示全部楼层
没有道路替换是因为不符合替换条件。有些道路虽然有点串,但在源数据中点串+道路代码+点串匹配不到,或者无需匹配。
回复

使用道具 举报

发表于 2017-2-6 16:40 | 显示全部楼层
另外, 对源数据,我设置成替换一次成功直接退出循环。要针对源数据某条记录中所有的道路都判断替换吗?
回复

使用道具 举报

 楼主| 发表于 2017-2-6 16:43 | 显示全部楼层
grf1973 发表于 2017-2-6 16:40
另外, 对源数据,我设置成替换一次成功直接退出循环。要针对源数据某条记录中所有的道路都判断替换吗?

最终目的是源数据中道路都替换成点串,而源数据的格式是:点+道路+点+道路...交替开的。  我也是在没辙了
回复

使用道具 举报

 楼主| 发表于 2017-2-6 16:45 | 显示全部楼层
grf1973 发表于 2017-2-6 16:40
另外, 对源数据,我设置成替换一次成功直接退出循环。要针对源数据某条记录中所有的道路都判断替换吗?

要对某条数据中所有道路都进行判断替换,才能最终达到目的,实在是太复杂了,辛苦您了。  没有其他好办法的话您看我说的人工逐条替换可行吗?
回复

使用道具 举报

发表于 2017-2-6 16:55 | 显示全部楼层
按你要求重新做了一个。输出数据前半部分是为了清楚一点。当然前半部分可以不显示的。

高级替换---求助(人工输入正反向替换).rar

16.23 KB, 下载次数: 5

评分

参与人数 1 +9 收起 理由
today0427 + 9 老师您辛苦了

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 08:15 , Processed in 0.308721 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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