|
试试这个- Sub test()
- Dim ar, fsdoc, i&, j&, r&, c&, reg, st$, ss$, d, br(), n&, a&, py&, ggg
- Dim x&, y&, z&
- ' On Error Resume Next
- Set reg = CreateObject("vbscript.regexp"): Set d = CreateObject("scripting.dictionary")
- Set ggg = CreateObject("vbscript.regexp"): ggg.Global = True: ggg.IgnoreCase = True: ggg.Pattern = "^[A-Z ]+"
- ar = Sheets("excel").[d1:q1]
- For i = 1 To UBound(ar, 2)
- d(ar(1, i)) = i + 3
- Next
- d("【禁忌】") = d("【注意】"): d("本品") = 4
- ReDim br(1 To 1000, 1 To i + 2)
- With reg
- .Global = True
- .IgnoreCase = True
- End With
- Set fsdoc = GetObject(ThisWorkbook.Path & "\中华人民共和国药典药材.doc")
- st = Trim(fsdoc.Range.Text)
- ar = Split(st, Chr(13))
- fsdoc.Close: st = ""
- For i = 0 To UBound(ar)
- n = n + 1: reg.Pattern = "^[A-Z ]+$"
- a = IIf(i + 100 > UBound(ar), UBound(ar), i + 100)
- x = 0: y = 0: z = 0: py = 0
- For j = a To i Step -1
- If ar(j) Like "【贮藏】*" Then x = j
- If ar(j) Like "【制剂】*" Then y = j
- If ar(j) Like "注:*" Then z = j
- If reg.test(ar(j)) And j > x Then py = j
- Next
- If x + 5 > y And y > x Then a = y Else a = x
- If x + 10 > z And z > x Then
- a = py - 2
- End If
- If a = 0 Then Exit For
- Do
- If n > 1 And ggg.test(ar(i)) And Not ggg.test(ar(i + 2)) Then
- If InStr(br(n - 1, 16), "。") Then
- br(n, 1) = Split(br(n - 1, 16), "。")(1)
- br(n - 1, 16) = Split(br(n - 1, 16), "。")(0)
- Exit Do
- End If
- End If
- br(n, 1) = br(n, 1) & ar(i)
- i = i + 1
- Loop Until ggg.test(ar(i)) Or i = a Or ar(i) Like "【*"
- If reg.test(ar(i + 1)) Then
- br(n, 2) = ar(i)
- i = i + 1
- br(n, 3) = ar(i)
- i = i + 1
- ElseIf reg.test(ar(i)) Then
- br(n, 2) = ar(i)
- i = i + 1
- End If
- c = 3: reg.Pattern = "^(【[\u4e00-\u9fa5]+】|本品)"
- For j = i To a
- st = Trim(ar(j))
- If reg.test(st) Then
- ss = reg.Execute(st)(0)
- If d.exists(ss) Then c = d(ss)
- End If
- br(n, c) = br(n, c) & st
- Next
- i = a
- Next
- Application.ScreenUpdating = False
- With Sheets("EXCEL")
- .Rows("2:65536").Clear
- For i = 1 To n
- For j = 1 To UBound(br, 2)
- .Cells(i + 1, j) = br(i, j)
- Next
- Next
- End With
- Application.ScreenUpdating = True
- End Sub
复制代码 |
|