Nearly:
Sub Test()
myStr = "red, 10-16 parts of aconite, 13-17 parts of suberect spatholobus stem, 5-15 parts of tianxiong, 12-18 parts ligusticum striatum, 2-4 parts celastreae, 25-35 parts maca, 10-18 parts of eucommia bark, 18-22 parts of fennel, 10-20 parts of radix paeoniae alba, 3-5 parts of raw rheum officinale, 10-18 parts of honeysuckle, 10-20 parts of rhizoma arisaematis, 10-20 parts of radix astragali, 4-8 parts of talc, 5-16 parts of asarum, 2-4 parts of notopterygium root, 16-20 parts of dried orange peel, 8-25 parts of radix codonopsitis, 2-6 parts of root of kudzu vine, 10-20 parts of pangolin, 17-23 parts of rehmannia glutinosa, 8-25 parts of ground beeltle, 11-15 parts of semen brassicae, 5-15 parts of rhododendron molle 2-4 shares, distilled spirit 200-300 shares"
myStr = Replace(myStr, "parts of ", "¬")
myStr = Replace(myStr, "parts ", "¬")
myStr = Replace(myStr, "parts", "¬")
myStr = Replace(myStr, "shares of ", "¬")
myStr = Replace(myStr, "shares ", "¬")
myStr = Replace(myStr, "shares", "¬")
a = Split(myStr, "¬")
b = UBound(a)
On Error Resume Next
For i = 0 To b
Z = Split(a(i), ",")
Debug.Print Application.Trim(Join(Array(Z(1), "pts wt.", Z(0))))
Next i
End Sub
To a naive eye, I would have thought more like:
Sub test2()
myStr = "red, 10-16 parts of aconite, 13-17 parts of suberect spatholobus stem, 5-15 parts of tianxiong, 12-18 parts ligusticum striatum, 2-4 parts celastreae, 25-35 parts maca, 10-18 parts of eucommia bark, 18-22 parts of fennel, 10-20 parts of radix paeoniae alba, 3-5 parts of raw rheum officinale, 10-18 parts of honeysuckle, 10-20 parts of rhizoma arisaematis, 10-20 parts of radix astragali, 4-8 parts of talc, 5-16 parts of asarum, 2-4 parts of notopterygium root, 16-20 parts of dried orange peel, 8-25 parts of radix codonopsitis, 2-6 parts of root of kudzu vine, 10-20 parts of pangolin, 17-23 parts of rehmannia glutinosa, 8-25 parts of ground beeltle, 11-15 parts of semen brassicae, 5-15 parts of rhododendron molle 2-4 shares, distilled spirit 200-300 shares"
myStr = Replace(myStr, "parts of ", "¬")
myStr = Replace(myStr, "parts ", "¬")
myStr = Replace(myStr, "parts", "¬")
myStr = Replace(myStr, "shares of ", "¬")
myStr = Replace(myStr, "shares ", "¬")
myStr = Replace(myStr, "shares", "¬")
a = Split(myStr, ",")
For i = LBound(a) To UBound(a)
Debug.Print Application.Trim(Replace(a(i), "¬", " pts wt. "))
Next i
End Sub