ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求前辈们帮忙实现这样的“查找替换”

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-15 10:08 | 显示全部楼层
duquancai 发表于 2017-5-15 09:23
Sub c3单引号前空格替换为两个半角空格()
'    3、把语句后上逗号前数量不等的空格,统一替换为二个半角 ...

杜前辈好!
运行完美!拜谢前辈!

TA的精华主题

TA的得分主题

发表于 2017-5-15 11:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 duquancai 于 2017-5-15 11:25 编辑
13907933959 发表于 2017-5-15 10:08
杜前辈好!
运行完美!拜谢前辈!

根据你29楼的附件,26楼的代码我运行了一下(你师傅的代码)好像漏掉4个(但不知道是那4个,我也没认真检查!),也有可能是我的代码错误判断了 多出来4个。说错了,好像是一样的。

TA的精华主题

TA的得分主题

发表于 2017-5-15 12:30 | 显示全部楼层
13907933959 发表于 2017-5-15 06:33
师傅好!
辛苦!辛苦!c3测试完美, 现在是c5的问题,不知什么原因运行不了?

Sub c5保证注释尾为一个句号()
'    5、把中文注释语后面,没有任何标点符号的加上一个中文句号。
    Dim mts As Object, reg As Object, n&, m&, k&, j&
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.Pattern = "[^\r]*'"
    Set mts = reg.Execute(ActiveDocument.Content)
    If Not mts Is Nothing Then
        For j = mts.Count - 1 To 0 Step -1
            m = mts(j).FirstIndex: n = mts(j).Length
            With ActiveDocument.Range(m, m + n)
                .Collapse 0: .MoveEndUntil Chr(13): k = Len(.Text): .Collapse 0
                .MoveStartWhile " 。", -k:  .Text = "。"
                .HighlightColorIndex = wdYellow '高亮黄色可自行取消!
            End With
        Next
    End If
End Sub

TA的精华主题

TA的得分主题

发表于 2017-5-15 15:19 | 显示全部楼层
____139:C5 问题不大,你把双引号重新键入即可,如还不行,删除全部英文标点,再把中文双引号重新键入。
***********
____杜先生 也出手了!——杜先生,正则表达式后来怎么也用到了《循环遍历段落法》呢?我觉得这个方法还不如 Do...Loop 快呢,但实践证明:杜先生 的代码确实是比 Selection 查找和 Range 查找 还快不少!
____前两天为了挑词,分别测试了一下运算速度,Selection查找时间:9.33秒,Range查找时间:2.30秒,杜先生正则查找时间:2秒。
____杜先生:如果有空有兴趣,请用《正则表达式》将下面公文常用中文标题4个层次一次性查找到,要求设置整个段落分别为红、粉、蓝、绿4个颜色即可。(如果 杜先生 不屑为之,也不强求啊!毕竟,杜先生 是本坛大神,谁都要求 杜先生,杜先生 不得累坏了呀!)
____谢谢 杜先生!
***例文demo:
一百二十三、指导思想。
(四百五十六)工作实践。
1234、今后设想。(或:1234.今后设想。或:1234.今后设想。)
(5678)改进措施。

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-15 15:24 | 显示全部楼层
duquancai 发表于 2017-5-15 11:20
根据你29楼的附件,26楼的代码我运行了一下(你师傅的代码)好像漏掉4个(但不知道是那4个,我也没认真检 ...

杜前辈好!
您真是个细心且严谨的人,我仔细比对了,我师傅的多出来的4个上逗号的查找结果,不是您的代码判断错了,是我师傅的代码,还存在有把有的语句前的上逗号的空格修改的现象(这个凭我的水平还真发现不了,可能我师傅也没发现),感谢前辈!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-15 15:25 | 显示全部楼层
duquancai 发表于 2017-5-15 12:30
Sub c5保证注释尾为一个句号()
'    5、把中文注释语后面,没有任何标点符号的加上一个中文句号。
     ...

杜前辈好!
代码测试一样OK完美!在困难中总有前辈伸出援手,将永记在心!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-5-15 15:52 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2017-5-14 23:19
139:原来我为了图方便简单,用了查找的方法;但不准确,重新又用VBA宏的方法,用颜色标识不方便,后又改用 ...

师傅好!
C5杜前辈以给了代码,c9会把有的用上逗号屏蔽了的语句变为绿色的现象,还请师傅优化!

TA的精华主题

TA的得分主题

发表于 2017-5-15 19:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
13907933959 发表于 2017-5-15 15:52
师傅好!
C5杜前辈以给了代码,c9会把有的用上逗号屏蔽了的语句变为绿色的现象,还请师傅优化!

Sub c9替换颜色()
'    9、把单独另起一行的中文注释语及句号,统一替换为绿色,段落符的黑色不变。
    Dim mts As Object, reg As Object, n&, m&, k&, j&
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.Pattern = "\r\s*'"
    Set mts = reg.Execute(ActiveDocument.Content)
    If Not mts Is Nothing Then
        For j = mts.Count - 1 To 0 Step -1
            m = mts(j).FirstIndex: n = mts(j).Length
            With ActiveDocument.Range(m, m + n)
                .Collapse 0: .MoveEndUntil Chr(13)
                .HighlightColorIndex = wdGreen '高亮绿色可自行改变!
            End With
        Next
    End If
End Sub

TA的精华主题

TA的得分主题

发表于 2017-5-15 21:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
谢天谢地,谢谢 杜先生!——前天,我还对怎么判断前面是英文,后面是中文,不知如何是好?昨晚,我先找到英文字母,再找到单引号(也叫:撇号),今天的 C9 杜先生 出手了,我就轻松了!相信应该没有问题。(杜先生 瞬间完成的事儿,我得几个小时,这是实话。因为 我和 杜先生 水平相差太大,不可同日而语,杜先生 在天上,我在地上。——今天把 杜先生 的帖子又找到了,关于 设置格式/查找替换 那两段代码今天在单位都复制下来了,以前也有复制,但并未认真对待过,最近觉得,还是 杜先生 的 正则表达式 厉害,最近又想学学 正则。)

TA的精华主题

TA的得分主题

发表于 2017-5-15 22:18 | 显示全部楼层
本帖最后由 duquancai 于 2017-5-15 22:25 编辑
413191246se 发表于 2017-5-15 15:19
____139:C5 问题不大,你把双引号重新键入即可,如还不行,删除全部英文标点,再把中文双引号重新键入。
...

Sub 例文demo()
'    针对纯文本
    Dim mt, reg As Object, n&, m&, j&, a, b
    sr$ = "[〇一二三四五六七八九十百千万亿]"
    a = Array("^" & sr & "+、", "^[((]\s*" & sr & "+\s*[))]", "^\d+[、..]", "^[((]\s*\d+\s*[))]")
    b = Array(6, 5, 2, 11)
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.MultiLine = True
    For j = 0 To UBound(a)
        reg.Pattern = a(j)
        For Each mt In reg.Execute(ActiveDocument.Content)
            m = mt.FirstIndex: n = mt.Length
            With ActiveDocument.Range(m, m + n)
                .Expand 4: .Font.ColorIndex = b(j)
            End With
        Next
    Next
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 03:01 , Processed in 0.022412 second(s), 4 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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