ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 删除不同章节下的重复段落

[复制链接]

TA的精华主题

TA的得分主题

发表于 2017-10-27 15:08 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 chenwenming 于 2017-11-5 09:53 编辑

对不同段落标题下的重复段落删除(文中标黄色的)--附件1,数组集合方式是不是快些?还有什么好方法?
如果再提高一个难度,一二三级标题中都有重复项时---见附件2,又该如何删除呢?其实带点合并段落的意思,但不完全是。附件2的程序操作思路:在一级标题中,也就是以大写一、二等开头的,如“二、工作”就有两行,重了,删除第二个重的,删除后,发现在二级标题中(以小写数字开头的),又有重的,如“二、工作”大段落下有“3、后天”有两个重的,删除后面一个;删除后再看,第三级标题下,还有重的,如在“一、学习”(一级)段落“1、早上”(二级)段落下有“A、语文”有两个重的(表格不算),删除除后面一个,同理在“2、中午”下也有两个“B、数学”,同样删除后面下一个。同理“二、工作”大段落下也执行相似操作。(这儿判断标题级别是按开头字符来的,如果能直接判断标题级别就更高级了)


删除重复段落(黄色).zip

11.7 KB, 下载次数: 36

原要求

删除重复段落(已用黄色标出)-难度提高.rar

12.13 KB, 下载次数: 23

提高一个难度

TA的精华主题

TA的得分主题

发表于 2017-10-27 15:27 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-27 15:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 chenwenming 于 2017-10-27 16:56 编辑
duquancai 发表于 2017-10-27 15:27
没啥挑战性。。。。

好吧,我没想到

TA的精华主题

TA的得分主题

发表于 2017-10-27 16:20 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
没有什么更好的方法了,楼主的方法是世界上最好的方法,楼主威武。

TA的精华主题

TA的得分主题

发表于 2017-10-27 16:34 来自手机 | 显示全部楼层
chenwenming 发表于 2017-10-27 15:53
吹吧,你到试试,看谁的速度快

本打主意写一个代码,经你这么回复,我不敢献丑了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-27 16:57 | 显示全部楼层
活在理想的世界 发表于 2017-10-27 16:20
没有什么更好的方法了,楼主的方法是世界上最好的方法,楼主威武。

我说错了,我改正

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-27 16:58 | 显示全部楼层
duquancai 发表于 2017-10-27 16:34
本打主意写一个代码,经你这么回复,我不敢献丑了!

好吧,我说错了,我改正,不是心急嘛,说得不好,请原谅!

TA的精华主题

TA的得分主题

发表于 2017-10-27 20:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 duquancai 于 2017-10-27 20:18 编辑
chenwenming 发表于 2017-10-27 16:58
好吧,我说错了,我改正,不是心急嘛,说得不好,请原谅!

Sub 你测试一下速度()
    Dim mts As Object, reg As Object, n&, m&, Str$, doc As Document
    Dim mhs As Object, x&, y&, p As Range, r As Range
    Set doc = ActiveDocument
    Set reg = CreateObject("vbscript.regexp")
    reg.Global = True: reg.MultiLine = True
    reg.Pattern = "^\s*\d+、(?:(?!^\s*\d+、).)+"
    Set mts = reg.Execute(doc.Content.Text)
    If Not mts Is Nothing Then
        For j = mts.Count - 1 To 0 Step -1
            m = mts(j).FirstIndex: n = mts(j).Length
            Set p = doc.Range(m, m + n)
            reg.Pattern = "^(.*)\r(?=.*^\1$)"
            Set mhs = reg.Execute(p.Text)
            If Not mhs Is Nothing Then
                For i = mhs.Count - 1 To 0 Step -1
                    x = mhs(i).FirstIndex: y = mhs(i).Length
                    Set r = doc.Range(p.Start + x, p.Start + x + y)
                    r.Text = Empty
                Next
            End If
        Next
    End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2017-10-27 21:35 | 显示全部楼层
duquancai 发表于 2017-10-27 20:09
Sub 你测试一下速度()
    Dim mts As Object, reg As Object, n&, m&, Str$, doc As Document
    Dim ...

谢谢!测试了一下,速度是快的,但没有实现删除的黄色重复行,而是删除的重复第一行

TA的精华主题

TA的得分主题

发表于 2017-10-27 21:50 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 duquancai 于 2017-10-27 21:53 编辑
chenwenming 发表于 2017-10-27 21:35
谢谢!测试了一下,速度是快的,但没有实现删除的黄色重复行,而是删除的重复第一行


晕,删除重复段落  既然是重复的,保留唯一的一段就行,非要删除黄色那一段才叫删除重复段落吗?你好好看看代码吧!如果看不懂请你再去修炼吧!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-24 01:18 , Processed in 0.032166 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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