“ 有的時候肆资,我們會得到一些嵌有數(shù)值的文本信息造虏。為了處理這些信息磅崭,我們不得不要絞盡腦汁提取其中的數(shù)值儿子。若格式統(tǒng)一,那還好辦砸喻,若格式千奇百怪……
比如這樣:
是不是瞬間有一萬匹草泥馬飄過……
構(gòu)思想法
很顯然柔逼,這一組信息并沒有明顯的規(guī)律。因此割岛,想要提取出其中的數(shù)字愉适,必須按照兩步走:
1. 找到第一個數(shù)字字符在字符串中的位置
2. 找出數(shù)字字符的長度
找出第一個數(shù)字字符的位置
找到第一個數(shù)字字符的位置,換句話來形容的話癣漆,就是要找到:字符為0~9儡毕,在整個字符串中的最小位置。
這里我先定義了兩個區(qū)域分別為IstNumbers——包含0~9這10個字符,以及IstDigits——包含0~9以及小數(shù)點(diǎn)和逗號腰湾。稍后雷恃,火箭君會詳細(xì)解釋一下,這樣定義的具體考慮费坊。
在C4單元格鍵入公式:
=MIN(IFERROR(FIND(lstNumbers,B4),""))
然后按下CTRL+SHIFT+Enter倒槐,完成數(shù)組公式的輸入。
FIND(IstNumbers,B4) 部分
這個部分公式附井,是逐一計算0~9這些數(shù)字在B4文本中出現(xiàn)的位置讨越。一旦在文本中找到這個數(shù)字,則直接返回一個字符位置永毅;否則返回一個錯誤值把跨。以B4單元格749000 RMB為例,其返回的數(shù)組為:
{4;#VALUE!;#VALUE!;#VALUE!;2;#VALUE!;#VALUE!;1;#VALUE!;3}
意為0出現(xiàn)在第四個位置沼死,4出現(xiàn)在第二個位置着逐,7出現(xiàn)在第一個位置,9出現(xiàn)在第三個位置意蛀,其他數(shù)字沒有出現(xiàn)耸别。
IFERROR(...,"") 部分
這個函數(shù),則將剛才找到的錯誤值全部轉(zhuǎn)換為空值县钥,返回值變?yōu)椋?{4;"";"";"";2;"";"";1;"";3}
{=MIN(...)}部分
這個函數(shù)則返回了秀姐,剛才處理過的數(shù)組中最小的值,也就是1若贮。這也就是數(shù)字字符的起始位置省有。 當(dāng)然,由于考慮到我們要比對尋找多個字符谴麦,因此用數(shù)組計算方式才正確蠢沿。
找到數(shù)字字符的長度
由于考慮到原數(shù)據(jù)中,還存在有逗號细移、小數(shù)點(diǎn)這樣的表達(dá)形式搏予,因此火箭君在上文中定義了IstDigits這個區(qū)域熊锭。
在D4中鍵入公式:
=SUMPRODUCT(COUNTIF(lstDigits,MID(B4,ROW($A$1:$A$200),1)))
COUNTIF(lstDigits, MID(…)) 部分
檢查B4文本中每一字符在IstDigits中是否出現(xiàn)弧轧,是為1,否為0碗殷。而整個B4文本總長不超過200個字符精绎。因此返回值為:
{1;1;1;1;1;1;0;0;0;0;0;0;0;…}
也就是B4中,僅有前六位為數(shù)字或者逗號锌妻、小數(shù)點(diǎn)代乃。
SUMPRODUCT(…) 部分
由于上一步的返回值是一個數(shù)組,因此使用sumproduct進(jìn)行求和。在這里返回為6搁吓。
數(shù)字抓取的結(jié)果
仍然有兩種格式無法被上述公式所認(rèn)可原茅,不知道小伙伴你,會有什么想法呢堕仔?也歡迎在火箭君的公眾號后臺留言擂橘,說說你的處理想法。
當(dāng)然摩骨,如果你對具體公式還有疑問通贞,可以在公眾號里回復(fù)“數(shù)字抓取”,我將推送給你我的工作表恼五!