ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 864|回复: 4

[求助] 在word中如何实现批量的查找和替换

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-10-27 13:25 | 显示全部楼层 |阅读模式
本帖最后由 Zlr乐 于 2021-10-27 14:16 编辑

在录入的族谱中,打的都是历年,比如顺治十四年、顺治十年、康熙二十八年、康熙二十年,我需要在这些所有的年后面添加一个公元多少年。       格式就是:
                     顺治十四年(公元1657年)
                     顺治十年(公元1653年)、
                     康熙二十八年(公元1689年)

最后需要在表格中这样子显示。请教高手,有什么 办法可以快速批量的换不?之前有找到一个宏代码,但是在顺治十年、十四年后面都重复提了数据,现在不知道要怎么搞了。求大神指点。


我之前添加过的是这样子的:
Sub 创建()
'
' 创建 宏
'
'
Sub 用Excel替换()
'启动Excel
Set excel_App = CreateObject("Excel.Application") '引用程序对象实例
'设置Excel为不可见
excel_App.Visible = False
'打开文件
Set excel_Book = excel_App.Workbooks.Open("E:\HongTiHuan.xlsx") '工作簿实例
Set excel_sheet = excel_Book.Worksheets("替换") '数据表实例
Xh = 1
Bth = excel_sheet.Range("A" & Xh).Value
Thw = excel_sheet.Range("B" & Xh).Value
While Bth <> ""
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = Bth '可以使用通配符了
.Replacement.Text = Thw
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
Xh = Xh + 1
Bth = excel_sheet.Range("A" & Xh).Value
Thw = excel_sheet.Range("B" & Xh).Value
Wend
'关闭Excel文件
Set excel_sheet = Nothing
excel_App.ActiveWorkbook.Close savechanges:=True '保存对EXCELL进行更改。
Set excel_Book = Nothing
excel_App.Quit
Set excel_App = Nothing
End Sub



替换过来的数据会有重复的:顺治十四年(公元1657年)(公元1653年),会替换成这个样子。请问下大神,有更好的办法吗?
                  

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-27 14:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
补充一下,我之前用过的是这个样子的。
Sub 创建()
'
' 创建 宏
'
'
Sub 用Excel替换()
'启动Excel
Set excel_App = CreateObject("Excel.Application") '引用程序对象实例
'设置Excel为不可见
excel_App.Visible = False
'打开文件
Set excel_Book = excel_App.Workbooks.Open("E:\HongTiHuan.xlsx") '工作簿实例
Set excel_sheet = excel_Book.Worksheets("替换") '数据表实例
Xh = 1
Bth = excel_sheet.Range("A" & Xh).Value
Thw = excel_sheet.Range("B" & Xh).Value
While Bth <> ""
Selection.Find.Replacement.ClearFormatting
With Selection.Find
.Text = Bth '可以使用通配符了
.Replacement.Text = Thw
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
Selection.Find.ClearFormatting
Xh = Xh + 1
Bth = excel_sheet.Range("A" & Xh).Value
Thw = excel_sheet.Range("B" & Xh).Value
Wend
'关闭Excel文件
Set excel_sheet = Nothing
excel_App.ActiveWorkbook.Close savechanges:=True '保存对EXCELL进行更改。
Set excel_Book = Nothing
excel_App.Quit
Set excel_App = Nothing
End Sub

但是返过来的数据有重复的。比如顺治十四年后面会:顺治十四年(公元1657年)(公元1653年),把出现过相同的替换过来了。请问下这个有什么 问题,还是不可以吗?

TA的精华主题

TA的得分主题

发表于 2021-10-27 22:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub aaaa_族谱_批量替换_数组()
  2.     Dim a, b, i&
  3.    
  4.     a = Array("顺治十四年", "顺治十年", "康熙二十八年") '数组请自行扩充!以半角逗号分隔
  5.     b = Array("1657", "1653", "1689") '数组请自行扩充!以半角逗号分隔(请与上组一一对应)
  6.    
  7.     For i = 0 To UBound(a)
  8.         With ActiveDocument.Content.Find
  9.             .ClearFormatting
  10.             .Text = a(i)
  11.             .Forward = True
  12.             .MatchWildcards = True
  13.             Do While .Execute
  14.                 With .Parent
  15.                     .Font.ColorIndex = wdRed '红色/此行代码可删除!
  16.                     .InsertAfter Text:="(公元" & b(i) & "年)"
  17.                     .Start = .End
  18.                 End With
  19.             Loop
  20.         End With
  21.     Next
  22. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-10-29 09:58 来自手机 | 显示全部楼层
413191246se 发表于 2021-10-27 22:03

谢谢亲的回复。我根据我之前的那个,重新建了2个表,先把大写的年份转换成阿拉伯数据的年份。在替换成我最终需要的样式就可以了。感谢感谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-4 10:13 , Processed in 0.030010 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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