Excel函数
读取Excel长文字内容中的规格数据
2016-11-13 22:22:55

读取Excel长文字内容中的规格数据

 

 江苏大侠的方法:函数

取巧思路:可以发现我们要取的是单字节的字符,利用MIDB,FINDB,LENB等能区分双字节和单字节的文本函数来取巧。
以B8单元格为例,先用MIDB($B8,ROW($1:998),2)来提取两个字节长度的字符;再用LENB(TRIM取得去除空格后的字符长度,可以判断出长度为1的是规格的首末位置。
获得每种规格的首末位置后,用SMALL(位置数组,{1,3,5…})取出每种规格的起始位置。再用MIDB(B8,起始位置,ROW(1:99))提取一组字符。
当提取到双字节的前面一个字符串时,该字符串后面会有一个空格(可以理解为双字节的一半为空格),再用VLOOKUP("* ",…来匹配。
完整公式=IFNA(VLOOKUP("* ",MIDB($B2&"侠",SMALL(IF(LENB(TRIM(MIDB($B2,ROW($1:998),2)))=1,ROW($2:999)),COLUMN()*2-7),ROW($1:99)),1,),"")
也可以用MMULT来判断规格的起始位置=IFNA(VLOOKUP("* ",MIDB($B2&"侠",SMALL(IF(MMULT(N(MIDB($B2,ROW($1:998)+{0,1},1)=" "),{1;9})=1,ROW($2:999)),COLUMN()-3),ROW($1:99)),1,),"")
规格不重复的公式=IFNA(TRIM(VLOOKUP("* ",MIDB($B18,SEARCHB("?",$B18,FINDB(C18,$B18)+LEN(C18)),ROW(1:104)),1,))," ")
A.1.1.4地面铺贴40mm宽ST-09卡地亚灰石材波打线40mmST-09

Excel小子的方法:VBA

Function tiqu(rg As Range, i) 'excel小子

    Dim re, m, mm

    Set re = CreateObject("vbscript.regexp")

    re.Global = True

    re.Pattern = "[\x00-\xff]+"

    Set m = re.Execute(rg.Value)

    If i > m.Count Then

        tiqu = ""

    Else

        tiqu = m(i - 1)

    End If

End Function