ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA 特定内容 实现末尾数字+1

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-7-2 09:40 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本人现需进行特定内容的更换,如:“Form No. : wwes-213-20”,想实现末尾数字的+1(Form No. : wwes-213-21),现已通过通配符的方式查找替换,查找“([F,f]*No*-[0-9]{1,3}-)20”,替换“\121”
待替换的内容.zip (9.88 KB, 下载次数: 16)
但此方式只能以穷举法的形式,穷举末尾的数字来替换,想请教各位大佬是否有更好的方式来完成这个效果。
以下为我的部分穷举代码
   With Selection.Find
       .Text = "([F,f]*No*-[0-9]{1,3}-)08"
       .Replacement.Text = "\109"
        .MatchWildcards = True '启用通配符匹配
   End With
       Selection.Find.Execute Replace:=wdReplaceAll
   With Selection.Find
       .Text = "([F,f]*No*-[0-9]{1,3}-)07"
       .Replacement.Text = "\108"
   End With
       Selection.Find.Execute Replace:=wdReplaceAll
   With Selection.Find
       .Text = "([F,f]*No*-[0-9]{1,3}-)06"
       .Replacement.Text = "\107"
   End With
       Selection.Find.Execute Replace:=wdReplaceAll
   With Selection.Find
       .Text = "([F,f]*No*-[0-9]{1,3}-)05"
       .Replacement.Text = "\106"
   End With
        Selection.Find.Execute Replace:=wdReplaceAll
   With Selection.Find
       .Text = "([F,f]*No*-[0-9]{1,3}-)04"
       .Replacement.Text = "\105"
   End With
       Selection.Find.Execute Replace:=wdReplaceAll
   With Selection.Find
       .Text = "([F,f]*No*-[0-9]{1,3}-)03"
       .Replacement.Text = "\104"
   End With
       Selection.Find.Execute Replace:=wdReplaceAll
   With Selection.Find
       .Text = "([F,f]*No*-[0-9]{1,3}-)02"
       .Replacement.Text = "\103"
   End With
       Selection.Find.Execute Replace:=wdReplaceAll
   With Selection.Find
       .Text = "([F,f]*No*-[0-9]{1,3}-)01"
       .Replacement.Text = "\102"
   End With



TA的精华主题

TA的得分主题

发表于 2021-7-2 13:03 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Sub test()
  2.     With ActiveDocument.Content.Find
  3.         .ClearFormatting
  4.         .Text = "-[0-9]{1,3}-[0-9]{1,}"
  5.         .Forward = True
  6.         .MatchWildcards = True
  7.         Do While .Execute
  8.             With .Parent
  9.                 If Not Selection.Type = wdSelectionIP Then
  10.                     If .End > Selection.End Then Exit Do
  11.                 End If
  12.                 .Text = "-" & Split(.Text, "-")(1) & "-" & Format(Val(Split(.Text, "-")(2)) + 1, "00")
  13.                 .Start = .End
  14.             End With
  15.         Loop
  16.     End With
  17. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-5 09:49 | 显示全部楼层

我昨晚也想到分割组合的形式,但是考虑到格式不匹配的问题,便没了思路,多谢大佬。
另外还有一个小疑问,这样子通配符搜索担心不够严谨,因此想把前面的“formxx",也搜索进去比较好,如果是这样子的话,在进行分割重组时
.Text = "-" & Split(.Text, "-")(1) & "-" & Format(Val(Split(.Text, "-")(2)) + 1, "00"),最前面那段应该怎么写呢?如果是excel的话,我可以用left函数+find函数来实现,但是vba好像不行?

TA的精华主题

TA的得分主题

发表于 2021-7-5 14:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
查找,定位,提取数据,对数据格式化,重新写入,经过这样一系列的VBA操作,应该可以实现

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-6 09:53 | 显示全部楼层

我昨晚想了个思路,运用通配符查找进行两次替换,第一次先插入分隔符,第二次再用您的思路分割组合,于是写了以下代码,但提醒说“替换内容含有超出范围的一组数”,我怀疑是在执行第二次替换代码的时候,替换后内容还残留着第一次的内容所致,麻烦您看下或者修改更正下,可以么?
With Selection.Find
        .ClearFormatting
        .Text = "([F,f]*No*-[0-9]{1,3}-)([0-9]{1,})"
        .MatchWildcards = True
        .Replacement.Text = "分隔符\1分隔符\2"
        .Execute Replace:=wdReplaceAll
      End With
      With Selection.Find
        .ClearFormatting
        .Text = "分隔符*分隔符[0-9]{1,}"
        .MatchWildcards = True
        Do While .Execute'怀疑是运行是这里时出错。
            With .Parent
                If Selection.Type <> wdSelectionIP Then
                    If .End > Selection.End Then Exit Do
                End If
                .Text = Split(.Text, "分隔符")(1) & Format(Val(Split(.Text, "分隔符")(2)) + 1, "00")
                .Start = .End
            End With
        Loop
    End With

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-6 09:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
小花鹿 发表于 2021-7-5 14:33
查找,定位,提取数据,对数据格式化,重新写入,经过这样一系列的VBA操作,应该可以实现

重新写入请问是用什么写入呢?上面的一位是用spilt的方式分割重组进去的,然后现在遇到了一小点问题,可以麻烦您看下我给他的回复么?

TA的精华主题

TA的得分主题

发表于 2021-7-6 21:26 | 显示全部楼层
可以试试如下代码(假设特定内容前部字符串固定,包括字母大小写及空格数)
  1. Sub test()
  2.     Dim a$, n%
  3.     Application.ScreenUpdating = True
  4.     With ActiveDocument.Content.Find
  5.         .Text = "Form No. : [a-z]@-[0-9]@-[0-9]{2}"
  6.         .MatchWildcards = True
  7.         Do While .Execute = True
  8.             With .Parent
  9.                 a = .Text
  10.                 n = InStrRev(a, "-")
  11.                 .Text = Left(a, n) & Format(Mid(a, n + 1) + 1, "00")
  12.                 .Collapse wdCollapseEnd
  13.             End With
  14.         Loop
  15.     End With
  16.     Application.ScreenUpdating = True
  17. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-7-8 09:01 | 显示全部楼层
sylun 发表于 2021-7-6 21:26
可以试试如下代码(假设特定内容前部字符串固定,包括字母大小写及空格数)

可以了,谢谢帮助。
你这个思路就是找最后一个“-”,通过最后一个“-”来瞄定的,不需要限制前面字符串固定啊。直接用通配符查找即可: .Text = "[F,f]*No*-[0-9]{1,3}-[0-9]{1,}",你这个思路就是我想找要的,如果是在excel的函数我就会写,vba不熟,多谢您的提供。

TA的精华主题

TA的得分主题

发表于 2021-7-26 06:29 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-23 19:17 , Processed in 0.040999 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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