|
在生產(chǎn)計(jì)劃PMC的日常業(yè)務(wù)中,物料的描述往往會(huì)包含各類數(shù)字信息,有時(shí)我們需要從中精準(zhǔn)提取這些數(shù)字,以便進(jìn)行后續(xù)的數(shù)據(jù)分析與整理工作。針對這一需求,WPS表格提供了多種提取單元格內(nèi)數(shù)字的方法,具體選擇哪種方法主要取決于數(shù)字在文本中的位置、排列規(guī)律等因素。接下來,古老師將通過一個(gè)實(shí)例,演示運(yùn)用多種技巧實(shí)現(xiàn)數(shù)字提取的過程,其中最后一項(xiàng)方法尤為便捷高效。 案例源數(shù)據(jù)如下圖所示,單元格內(nèi)包含了產(chǎn)品成本單價(jià)這一關(guān)鍵數(shù)據(jù),以“捌拾玖元陸角肆分 ¥89.64元”的形式呈現(xiàn)。現(xiàn)需從中精確提取出數(shù)字部分,即“捌拾玖元陸角肆分”對應(yīng)的數(shù)值“89.64”。在這個(gè)例子中,待處理的單元格內(nèi)容混雜了文本、數(shù)字、特殊符號及空格等元素。 接下來,我們將針對上述案例,逐一演示如何靈活運(yùn)用不同的文本函數(shù)組合,諸如FIND、TEXTAFTER/TEXTBEFORE、TEXTSPLIT等工具,以實(shí)現(xiàn)對數(shù)字的有效提取。各位用戶可根據(jù)自身實(shí)際需求,借鑒不同的提取策略,以針對性地解決各自面臨的問題。
TEXTAFTER+TEXTBEFORE通過觀察上圖中的數(shù)字,提取數(shù)字的核心就是鎖定數(shù)字的開始和結(jié)尾,剛好數(shù)字的開始是以符號“¥”開始和漢字“元”結(jié)尾。有了這個(gè)規(guī)律,就配合TEXTAFTER+TEXTBEFORE函數(shù)就可以精準(zhǔn)提取了。 錄入以下函數(shù): =--TEXTBEFORE(TEXTAFTER(B3,'¥'),'元') 函數(shù)釋義: TEXTAFTER(B3,'¥'):TEXTAFTER 函數(shù)用于查找指定文本之后的第一個(gè)子串。 參數(shù)1:B3,指定了要搜索的文本范圍,即單元格B3的內(nèi)容。 參數(shù)2:'¥',指定了查找的起始標(biāo)記,即從“¥”符號之后開始提取文本。 結(jié)果:該函數(shù)會(huì)返回從“¥”符號開始直到單元格B3中下一個(gè)指定字符(此處未指定,所以默認(rèn)到字符串末尾)之間的所有文本。在這個(gè)例子中,B3的內(nèi)容為“捌拾玖元陸角肆分 ¥89.64元”,則TEXTAFTER函數(shù)返回的結(jié)果將是“89.64元”。 TEXTBEFORE(...,'元'): TEXTBEFORE 函數(shù)用于查找指定文本之前的一個(gè)子串。 參數(shù)1:TEXTAFTER(B3,'¥'),這是對上一步得到的結(jié)果應(yīng)用TEXTBEFORE函數(shù),即從“89.64元”中繼續(xù)提取。 參數(shù)2:'元',指定了提取的終止標(biāo)記,即提取從起始位置到“元”字符出現(xiàn)之前的文本。 結(jié)果:該函數(shù)會(huì)返回從起始位置(在此處即“¥”符號之后)到“元”字符之間(但不包括“元”字符)的所有文本。對于上一步返回的“89.64元”,TEXTBEFORE函數(shù)將提取出“89.64”。 --:兩個(gè)減號(--)連用在這里起到了強(qiáng)制轉(zhuǎn)換的作用。在WPS中,單個(gè)負(fù)號 - 用于表示負(fù)數(shù)或執(zhí)行減法運(yùn)算,而連續(xù)的兩個(gè)減號則是用來將文本型數(shù)字轉(zhuǎn)換為真正的數(shù)值型數(shù)據(jù)。由于前面的TEXTAFTER和TEXTBEFORE操作返回的是文本格式的數(shù)字(如“89.64”),這里使用--將這個(gè)文本轉(zhuǎn)換為數(shù)值型的89.64,以便于后續(xù)進(jìn)行數(shù)值計(jì)算或數(shù)據(jù)分析。 結(jié)果如下圖所示:
TEXTSPLIT+TAKE除了運(yùn)用上述定位法之外,還可采用關(guān)鍵字分列法。鑒于數(shù)字信息嵌于符號“¥”與漢字“元”之間,我們僅需針對這兩處特定字符實(shí)施分列操作,最終選取并保留分列后所得的最后一列內(nèi)容即可。TEXTSPLIT(B3, {'¥','元'}, , 1) 是對單元格 B3 中的文本進(jìn)行拆分。 錄入以下函數(shù)并向下填充: =--TAKE(TEXTSPLIT(B3,{'¥','元'},,1),,-1) 函數(shù)釋義: 第一個(gè)函數(shù):TEXTSPLIT {'¥','元'} 是一個(gè)包含兩個(gè)分隔符的數(shù)組,表示同時(shí)以符號“¥”和“元”作為列分隔符。這意味著當(dāng)遇到這兩個(gè)字符之一時(shí),文本會(huì)被分割成不同的列。 第三個(gè)參數(shù)留空(即逗號后無輸入),通常用于指定行分隔符,此處未提供任何行分隔符,表示不進(jìn)行行拆分。 第四個(gè)參數(shù) 1 表示返回拆分后的第一列數(shù)據(jù),忽略其他列。 第二個(gè)參數(shù):TAKE 函數(shù): TAKE(..., , -1) 對 TEXTSPLIT 的結(jié)果執(zhí)行取值操作。 第一個(gè)省略號(...)代表 TEXTSPLIT 的結(jié)果,即拆分后得到的第一列數(shù)據(jù)。 第二個(gè)省略號留空,表示不指定行索引,通常用于指定要取哪幾行數(shù)據(jù),留空則默認(rèn)取全部行。 -1 作為最后一個(gè)參數(shù),表示取最后一行數(shù)據(jù)。由于 TEXTSPLIT 只返回了一列數(shù)據(jù),這里的“行”實(shí)際上就是指這一列中的最后一個(gè)元素。 雙負(fù)號 (--):將其轉(zhuǎn)換為數(shù)值。 使用 TEXTSPLIT 函數(shù)以分隔符“¥”和“元”將單元格 B3 中的文本拆分為多列,并僅保留第一列數(shù)據(jù)。接著,使用 TAKE 函數(shù)從拆分后的第一列數(shù)據(jù)中提取最后一個(gè)元素,即該列中的最后一個(gè)數(shù)值字符串。最后,通過雙負(fù)號 (--) 將提取出的數(shù)值字符串轉(zhuǎn)換為實(shí)際的數(shù)值類型。 效果如下圖所示:
REGEXP最后一個(gè)方法雖寫法簡潔,但要求使用者具備一定的編程基礎(chǔ)。目前,該函數(shù)在公式版本中尚未推出,但預(yù)計(jì)將于四月底正式發(fā)布。此函數(shù)即為正則表達(dá)式函數(shù)“REGEXP”。 錄入函數(shù): =--REGEXP(B3,'\d.*.\d') 函數(shù)釋義: B3:表示要應(yīng)用正則表達(dá)式的單元格引用,即待檢查的文本字符串位于單元格B3中。 '\d.*.\d':這是一個(gè)正則表達(dá)式模式,解釋如下: \d:匹配任何一位數(shù)字(等同于 [0-9])。 .*:匹配任意數(shù)量(包括零個(gè))的任意字符(. 代表除換行符外的任意字符,* 表示前面的字符可以重復(fù)零次或多次)。 .\d:匹配一個(gè)任意字符(.)后跟一個(gè)數(shù)字(\d)。 判斷B3中的文本是否以一個(gè)數(shù)字開始,中間包含任意字符序列,然后以一個(gè)點(diǎn)(.)和另一個(gè)數(shù)字結(jié)束。雙減號(--)進(jìn)行文本轉(zhuǎn)換成數(shù)值。 效果如下圖:
|
|
|