ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 将WORD按要求整理为excel文件,超复杂、谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-6-9 00:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
复杂,太复杂

TA的精华主题

TA的得分主题

发表于 2013-6-9 02:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
凑一个
  1. Sub yang()
  2.     Dim ar, fsdoc, i&, j&, r&, c&, reg, st$, ss$, d, br(), n&
  3.     Set reg = CreateObject("vbscript.regexp"): Set d = CreateObject("scripting.dictionary")
  4.     ar = Sheets("excel").[e1:q1]
  5.     For i = 1 To UBound(ar, 2)
  6.         d(ar(1, i)) = i + 4
  7.     Next
  8.     ReDim br(1 To 1000, 1 To i + 3)
  9.     With reg
  10.         .Global = True
  11.         .Pattern = "^【[\u4e00-\u9fa5]+】"
  12.     End With
  13.     Set fsdoc = GetObject(ThisWorkbook.Path & "\中国药典2010年版一部修订1.doc")
  14.     st = Trim(fsdoc.Range.Text)
  15.     ar = Split(st, Chr(13))
  16.     fsdoc.Close: st = ""
  17.     For i = 0 To UBound(ar)
  18.         st = Trim(ar(i))
  19.         If st <> "" Then r = i: Exit For
  20.     Next
  21.     For i = r To UBound(ar)
  22.         c = 4: n = n + 1
  23.         For j = 0 To 3
  24.             If ar(i + j) Like "【*" Then
  25.                 Exit For
  26.             End If
  27.             br(n, j + 1) = ar(i + j)
  28.         Next
  29.         i = i + j
  30.         Do
  31.             st = Trim(ar(i))
  32.             If reg.test(st) Then
  33.                 ss = reg.Execute(st)(0)
  34.                 If d.exists(ss) Then
  35.                     If d(ss) > c Then c = d(ss)
  36.                 End If
  37.             End If
  38.             br(n, c) = br(n, c) & st
  39.             If (ss = "【贮藏】" And Not ar(i + 1) Like "【*") Or ss = "【制剂】" Then Exit Do
  40.             i = i + 1
  41.         Loop
  42.         If i > UBound(ar) - 3 Then Exit For
  43.     Next
  44.     Application.ScreenUpdating = False
  45.     With Sheets("EXCEL")
  46.         .Rows("2:65536").ClearContents
  47.         For i = 1 To n
  48.             For j = 1 To UBound(br, 2)
  49.                 .Cells(i + 1, j) = br(i, j)
  50.             Next
  51.         Next
  52.     End With
  53.     Application.ScreenUpdating = True
  54. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-9 06:56 | 显示全部楼层
学习了,20楼版主的代码求出的结果排列完美一些、22楼 yangyangzhifeng大侠的代码容错能力更强一些。
感谢KCFONG 版主、yangyangzhifeng大侠。
迟点上个完整的从《中国药典》复制的药材和饮片大全试试。

再次感谢。以我的水平只有感谢的份!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-9 21:26 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 ak47ok 于 2013-6-9 21:47 编辑

还真是搞不定。今天整理了《中国药典》2010版一部中的640多个药材的全文,用20楼KCFONG 版主的代码只能排列完美求出44个结果,到“小茴香”就结束了,不知为何?用22楼 yangyangzhifeng大侠的代码能排列完毕,但排列的结果还需调整。

不好意思再麻烦KCFONG 版主看看如何解决。再次感谢!

上个完整版的附件。

中华人民共和国药典药材.rar

646.37 KB, 下载次数: 15

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-9 21:42 | 显示全部楼层
KCFONG 发表于 2013-6-9 00:06
see if help you
please test

今天试了刚整理的全部药材、还是遇到问题:
24楼的附件不能整理完毕。

TA的精华主题

TA的得分主题

发表于 2013-6-12 15:43 | 显示全部楼层
see if fit your request
Please note that each cell can only have 256 characters

将WORD按要求整理为excel文件 v2.rar

14.82 KB, 下载次数: 26

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-12 20:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
KCFONG 发表于 2013-6-12 15:43
see if fit your request
Please note that each cell can only have 256 characters

感动、感激!再次感谢KCFONG 版主!
看来从经OCR的PDF复制的文字还要认真整理(当然是要用VBA。不然太烦、工作量太大了)
我认真学习、消化!
谢谢!

TA的精华主题

TA的得分主题

发表于 2013-6-17 08:01 | 显示全部楼层
试试这个
  1. Sub test()
  2.     Dim ar, fsdoc, i&, j&, r&, c&, reg, st$, ss$, d, br(), n&, a&, py&, ggg
  3.     Dim x&, y&, z&
  4.     '    On Error Resume Next
  5.     Set reg = CreateObject("vbscript.regexp"): Set d = CreateObject("scripting.dictionary")
  6.     Set ggg = CreateObject("vbscript.regexp"): ggg.Global = True: ggg.IgnoreCase = True: ggg.Pattern = "^[A-Z ]+"
  7.     ar = Sheets("excel").[d1:q1]
  8.     For i = 1 To UBound(ar, 2)
  9.         d(ar(1, i)) = i + 3
  10.     Next
  11.     d("【禁忌】") = d("【注意】"): d("本品") = 4
  12.     ReDim br(1 To 1000, 1 To i + 2)
  13.     With reg
  14.         .Global = True
  15.         .IgnoreCase = True
  16.     End With
  17.     Set fsdoc = GetObject(ThisWorkbook.Path & "\中华人民共和国药典药材.doc")
  18.     st = Trim(fsdoc.Range.Text)
  19.     ar = Split(st, Chr(13))
  20.     fsdoc.Close: st = ""
  21.     For i = 0 To UBound(ar)
  22.         n = n + 1: reg.Pattern = "^[A-Z ]+$"
  23.         a = IIf(i + 100 > UBound(ar), UBound(ar), i + 100)
  24.         x = 0: y = 0: z = 0: py = 0
  25.         For j = a To i Step -1
  26.             If ar(j) Like "【贮藏】*" Then x = j
  27.             If ar(j) Like "【制剂】*" Then y = j
  28.             If ar(j) Like "注:*" Then z = j
  29.             If reg.test(ar(j)) And j > x Then py = j
  30.         Next
  31.         If x + 5 > y And y > x Then a = y Else a = x
  32.         If x + 10 > z And z > x Then
  33.             a = py - 2
  34.         End If
  35.         If a = 0 Then Exit For
  36.         Do
  37.             If n > 1 And ggg.test(ar(i)) And Not ggg.test(ar(i + 2)) Then
  38.                 If InStr(br(n - 1, 16), "。") Then
  39.                     br(n, 1) = Split(br(n - 1, 16), "。")(1)
  40.                     br(n - 1, 16) = Split(br(n - 1, 16), "。")(0)
  41.                     Exit Do
  42.                 End If
  43.             End If
  44.             br(n, 1) = br(n, 1) & ar(i)
  45.             i = i + 1
  46.         Loop Until ggg.test(ar(i)) Or i = a Or ar(i) Like "【*"
  47.         If reg.test(ar(i + 1)) Then
  48.             br(n, 2) = ar(i)
  49.             i = i + 1
  50.             br(n, 3) = ar(i)
  51.             i = i + 1
  52.         ElseIf reg.test(ar(i)) Then
  53.             br(n, 2) = ar(i)
  54.             i = i + 1
  55.         End If
  56.         c = 3: reg.Pattern = "^(【[\u4e00-\u9fa5]+】|本品)"
  57.         For j = i To a
  58.             st = Trim(ar(j))
  59.             If reg.test(st) Then
  60.                 ss = reg.Execute(st)(0)
  61.                 If d.exists(ss) Then c = d(ss)
  62.             End If
  63.             br(n, c) = br(n, c) & st
  64.         Next
  65.         i = a
  66.     Next
  67.     Application.ScreenUpdating = False
  68.     With Sheets("EXCEL")
  69.         .Rows("2:65536").Clear
  70.         For i = 1 To n
  71.             For j = 1 To UBound(br, 2)
  72.                 .Cells(i + 1, j) = br(i, j)
  73.             Next
  74.         Next
  75.     End With
  76.     Application.ScreenUpdating = True
  77. End Sub
复制代码

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-20 11:32 | 显示全部楼层
本帖最后由 ak47ok 于 2013-6-25 14:47 编辑
yangyangzhifeng 发表于 2013-6-17 08:01
试试这个


谢谢!
下标越界的提示的问题解决,原来是自己粗心将excel表中的第一行内容给清除了。

再次感激高手!

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-10-4 14:24 , Processed in 0.041269 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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