ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 提取不同字数的行

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-2-20 19:47 | 显示全部楼层 |阅读模式
我有一个大文件,我想把字数相同的行分别提取,结构符号涉及16种,字涉及中、日、韩等等,还涉及多种字体。用查找替换的办法,第一慢,第二似乎有错误。所以,又想麻烦哪位大佬给写一段代码。万分感谢!
用查找的方法提取不准确.PNG

把结构符后二字词的行提取出来.zip

80.1 KB, 下载次数: 7

TA的精华主题

TA的得分主题

发表于 2024-2-20 23:13 | 显示全部楼层
搞不懂什么情况,第一、二行的等号在第3位,第三行的等号在第2位
Sub test()
    Dim s1, s2, s3
    With ActiveDocument
        s1 = Mid(.Paragraphs(1).Range.Text, 3, 1)
        s2 = Mid(.Paragraphs(2).Range.Text, 3, 1)
        s3 = Mid(.Paragraphs(3).Range.Text, 2, 1)
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2024-2-21 02:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
楼主,小花鹿 老师:此题我以为用 For Each ... Next 结构简单地循环遍历查找字长为 6 的段落即可,结果,发现第一、二段落字长均为 8,只好改为查找 5 个字符的段落,下面代码仅供参考:
  1. Sub a0221_CopyText()
  2.     Dim doc As Document, r As Range, i As Paragraph
  3.    
  4.     Set doc = ActiveDocument
  5.     doc.Content.InsertParagraphBefore
  6.     Set r = Documents.Add.Range(Start:=0, End:=0)
  7.    
  8.     With doc.Content.Find
  9.         .ClearFormatting
  10.         .Text = "^13?????^13"
  11.         .Forward = True
  12.         .MatchWildcards = True
  13.         Do While .Execute
  14.             With .Parent
  15.                 .MoveStart
  16.                 .Copy
  17.                 With r
  18.                     .Paste
  19.                     .Collapse 0
  20.                 End With
  21.                 .Start = .End
  22.                 .End = .End - 1
  23.             End With
  24.         Loop
  25.     End With
  26.    
  27.     doc.Close 0
  28.     MsgBox "Complete!", 0 + 48
  29. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2024-2-21 09:00 | 显示全部楼层
小花鹿 发表于 2024-2-20 23:13
搞不懂什么情况,第一、二行的等号在第3位,第三行的等号在第2位
Sub test()
    Dim s1, s2, s3

一般的汉字是 uft-8,现在超大字符集后面的汉字都是 uft-16,所以不能使用 len,left
,right,mid之类的判断和截取,可以使用.character来判断。

TA的精华主题

TA的得分主题

发表于 2024-2-21 09:07 | 显示全部楼层
413191246se 发表于 2024-2-21 02:18
楼主,小花鹿 老师:此题我以为用 For Each ... Next 结构简单地循环遍历查找字长为 6 的段落即可,结果, ...

表面看起来是5个字符,实际不是
Sub test()
    Dim s, m&, n&, p As Paragraph
    For Each p In ActiveDocument.Paragraphs
        s = p.Range.Text
        m = InStr(s, "=")
        s = Mid(s, m + 1)
        n = Len(s)
        Stop
    Next p
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-21 09:56 | 显示全部楼层
小花鹿 发表于 2024-2-20 23:13
搞不懂什么情况,第一、二行的等号在第3位,第三行的等号在第2位
Sub test()
    Dim s1, s2, s3

老师您好!谢谢您的帮助。关于等号位置是“skukansongti_EXTB”字体的原因。另外,您的代码运行后,没有变化。我的是office2016。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-21 10:01 | 显示全部楼层
413191246se 发表于 2024-2-21 02:18
楼主,小花鹿 老师:此题我以为用 For Each ... Next 结构简单地循环遍历查找字长为 6 的段落即可,结果, ...

老师您好!我的文件特大,在运行在半个小时后崩了,我把文件一分为二后,在某个地方又崩了。谢谢您的帮助,看来还是要麻烦您解决崩的问题!万分感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-2-21 10:05 | 显示全部楼层
小花鹿 发表于 2024-2-21 09:07
表面看起来是5个字符,实际不是
Sub test()
    Dim s, m&, n&, p As Paragraph

@小花鹿老师您好!您的这个,对于我这白痴来说,不知道怎么办?哈哈哈哈
捕获.PNG

TA的精华主题

TA的得分主题

发表于 2024-2-21 10:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 batmanbbs 于 2024-2-22 22:49 编辑
常扬帆 发表于 2024-2-21 10:05
@小花鹿老师您好!您的这个,对于我这白痴来说,不知道怎么办?哈哈哈哈

调试用的,删除即可

TA的精华主题

TA的得分主题

发表于 2024-2-21 10:42 | 显示全部楼层
我的代码是测试用的,不是解决问题的
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-6 18:36 , Processed in 0.047452 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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