Excel公式技巧10: 從字符串中提取數字——數字位於字符串開頭

2021-12-29 完美Excel

學習Excel技術,關注微信公眾號:

excelperfect

 

本文主要研究從字符串開頭提取數字的技術:

1. 這些數字是連續的

2. 這些連續的數字位於字符串的開頭

3. 想要的結果是將這些連續的數字返回到單個單元格

 

對於下面研究的每種解決方案,我們需要在兩種不同的情況下測試其健全性:

1. 字符串中除開頭外其他地方沒有數字的情況,例如123ABC。

2. 字符串中除開頭外其他地方也有數字,要麼在末尾,要麼在中間,例如123ABC456或123ABC456DEF。

 

無論字符串中除開頭外是否還有其他數字,將要研究的某些解決方案都可以很好地工作,但有些解決方案則存在局限性。在分析每種解決方案時,將會明確說明。

 

LOOKUP與LEFT

公式1:

=-LOOKUP(1,-LEFT(A1,ROW(INDIRECT("1:"& LEN(A1)))))

 

如果單元格A1中的內容為「123ABC」,那麼上述公式1返回「123」。其解析過程如下:

ROW(INDIRECT("1:" & LEN(A1)))

生成一個由1至單元格A1中字符串長度數的整數組成的單列數組:

{1;2;3;4;5;6}

這樣,公式1變為:

=-LOOKUP(1,-LEFT(A1,{1;2;3;4;5;6}))

由於LOOKUP強制生成數組,因此LEFT在這裡不是返回單個值,而是返回由六個值組成的數組,每個值對應於將LEFT的num_chars參數指定為1、2、3、4、5、6應用於A1中的字符串,即:

=-LOOKUP(1,-{"1";"12";"123";"123A";"123AB";"123ABC"})

其中的數組乘以-1,得到:

=-LOOKUP(1,{-1;-12;-123;#VALUE!; #VALUE!; #VALUE!})

對於LOOKUP來說,如果在lookup_vector中未找到lookup_value,並且假設lookup_vector中沒有大於lookup_value的值,則該函數將從lookup_vector中返回最後一個值(本例中為數字)。該函數還會忽略lookup_vector中的任何錯誤值。這就是在開始給lookup_vector(通過創建一個由負數、零(如果期望提取的字符串以0開頭例如0123ABC)或錯誤值組成的數組)中的值添加負號的原因,可以確保lookup_value為1永遠是一個充分而合法的選擇。在這裡,由於在lookup_vector中找不到1,公式返回數組中最後一個數值,即-123。

 

當然,這絕對不是處理這種公式結構的唯一方法,只要確保選擇的lookup_value的值足夠大。其實這並不困難,讓lookup_value使用所謂的「大數」(即9.99999999999999E+307,這是Excel中允許的最大正數),確保這種公式構造有效。或者,有些人喜歡僅取「非常大」的值,例如10^10(其好處是看起來不像「大數」那麼笨拙)。

 

由於公式1中LOOKUP函數返回-123,因此在前面添加一個負號使其變為想要的123。

 

但是,公式1並不可靠。因為某些字符串可能會返回其他結果,例如單元格中的值為12JUN,那麼:

=-LOOKUP(1,-LEFT(A1,ROW(INDIRECT("1:"& LEN(A1)))))

轉換為:

=-LOOKUP(1,-LEFT(A1,{1;2;3;4;5}))

轉換為:

=-LOOKUP(0,-{"1";"12";"12J";"12JU";"12JUN"})

此時,會轉換為:

=-LOOKUP(0,{-1;-12;#VALUE!;#VALUE!;-43994})

這是由於在強制將「12JUN」轉換成數字時,Excel認為其是日期「2020-6-12」,因此將其轉換為相應的序列數字。此時,LOOKUP函數返回-43994。

 

當然,這不是唯一會出現這種情況的字符串,實際上,任何可以被Excel解釋為日期的字母數字都會如此,例如30SEP、01FEB等,這也會導致不正確的結果。

 

此外,公式1對於諸如123E3等形式的字符串也無效,其結果將是123000。因為在通常情況下,將123E3輸入單元格後,Excel會自動將其轉換成科學計數格式。

 

LEFT與COUNT

公式2:

=0+LEFT(A1,COUNT(0+MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)))

這是一個數組公式。

 

仍以單元格A1中的數據是「123ABC」為例。公式2可以轉換為:

=0+LEFT(A1,COUNT(0+MID(A1,{1;2;3;4;5;6},1)))

轉換為:

=0+LEFT(A1,COUNT(0+{"1";"2";"3";"A";"B";"C"}))

轉換為:

=0+LEFT(A1,COUNT({1;2;3;#VALUE!;#VALUE!;#VALUE!}))

COUNT函數忽略錯誤值,得到:

=0+LEFT(A1,3)

結果為:

123

 

下面,嘗試一個公式2可不可以處理除字符串開頭外其他位置還存在數字的情形,例如如果單元格A1中的數據是「123ABC45」,那麼公式2可以轉換為:

=0+LEFT(A1,COUNT(0+MID(A1,{1;2;3;4;5;6;7;8},1)))

轉換為:

=0+LEFT(A1,COUNT(0+{"1";"2";"3";"A";"B";"C";"4";"5"}))

轉換為:

=0+LEFT(A1,COUNT({1;2;3;#VALUE!;#VALUE!;#VALUE!;4;5}))

轉換為:

=0+LEFT(A1,5)

轉換為:

=0+"123AB"

結果為:

#VALUE!

原因是字符串的末尾有其他數字,因此COUNT函數統計的數字個數大於字符串開頭的數字個數,這樣LEFT取值仍是字母數字混合的字符串。

 

LEFT、MATCH與ISNUMBER

公式3:

=0+LEFT(A1,MATCH(FALSE,ISNUMBER(0+MID(A1,ROW(INDIRECT("1:"& LEN(A1))),1)),0)-1)

這是一個數組公式。

 

仍以單元格A1中的數據為「123ABC」,公式3可轉換為:

=0+LEFT(A1,MATCH(FALSE,ISNUMBER({1;2;3;#VALUE!;#VALUE!;#VALUE!}),0)-1)

對於ISNUMBER函數來說,傳遞給它的如果是錯誤值則返回FALSE,因此上述公式可轉換為:

=0+LEFT(A1,MATCH(FALSE,{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE},0)-1)

轉換為:

=0+LEFT(A1,4-1)

轉換為:

=0+LEFT(A1,3)

結果為:

123

 

在公式3中,MATCH/ISNUMBER組合確保字符串中除開頭以外的數字不會影響最終的結果。例如如果單元格A1中的數據是「123ABC45」,那麼公式3可以轉換為:

=0+LEFT(A1,MATCH(FALSE,ISNUMBER({1;2;3;#VALUE!;#VALUE!;#VALUE!;4;5}),0)-1)

轉換為:

=0+LEFT(A1,MATCH(FALSE,{TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE},0)-1)

轉換為:

=0+LEFT(A1,4-1)

轉換為:

=0+LEFT(A1,3)

結果為:

123

 

LEFT、MATCH與ISERR

與公式3的構造一致,唯一的不同是使用ISERR函數代替了ISNUMBER函數,並強制返回由數字組成的數組。

 

公式4:

=0+LEFT(A1,MATCH(1,0+ISERR(0+MID(A1,ROW(INDIRECT("1:"& LEN(A1))),1)),0)-1)

這是一個數組公式。

 

仍以單元格A1中的數據為「123ABC」,公式4可轉換為:

=0+LEFT(A1,MATCH(1,0+ISERR({1;2;3;#VALUE!;#VALUE!;#VALUE!;4;5}),0)-1)

轉換為:

=0+LEFT(A1,MATCH(1,0+{FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;FALSE},0)-1)

轉換為:

=0+LEFT(A1,MATCH(1,{0;0;0;1;1;1;0;0},0)-1)

轉換為:

=0+LEFT(A1,4-1)

轉換為:

=0+LEFT(A1,3)

結果為:

123

 

與公式3一樣,字符串中除開頭有數字外其它部位存在數字時不影響結果。

 

註:本技巧整理自excelxor.com,有興趣的朋友可以研閱原文,特別是原文後面的評論。

相關焦點

  • Excel公式技巧11: 從字符串中提取數字——數字位於字符串末尾
    學習Excel技術,關注微信公眾號:excelperfect 上篇文章講解了提取位於字符串開頭的數字的公式技術
  • Excel公式技巧12: 從字符串中提取數字——將所有數字分別提取到不同的單元格
    學習Excel技術,關注微信公眾號:excelperfect 前兩篇文章分別講解了提取位於字符串開頭和末尾的數字的公式技術
  • excel數據提取技巧:從混合文本中提取數字的萬能公式
    有沒有能把任何文本中包含的所有數字都提取出來的公式?當然是有的,今天就給大家帶來提取數字的萬能公式,不管數字在文本中的位置是否有規律,不管文本中數字有多少,它都能把數字提取出來。趕緊來看看吧!學習更多技巧,請收藏關注部落窩教育excel圖文教程。在上一篇文章中,小花講解了通過觀察混合文本特徵,設置特定公式,完成數據提取的三種情景。
  • Excel數字提取技巧:從混合文本中提取數字的方法
    前面我們分享了不用函數公式提取數字的5種方法。今天我們分享用簡單公式從混合文本中提取數字的方法。因為採用的公式很簡單,所以總體來說只適合數字在文本中的位置有一定規律的情況。如果想用公式提取沒有位置規律的數字,那就得看我們下一篇教程。學習更多技巧,請收藏關注部落窩教育excel圖文教程。
  • Excel實用公式4:從分隔符連接的字符串中提取子字符串
    圖1 如果我們想要提取其中的某個城市,例如第8個子字符串表示的城市名,則可以使用下面的公式:=TRIM(MID(SUBSTITUTE(A1,",",REPT(" ",999)),8*999-998,999)) 在公式中,先使用SUBSTITUTE函數以999個空格來替換字符串中的每個分隔符,然後使用MID
  • Excel公式技巧23: 同時定位字符串中的第一個和最後一個數字
    然而,通常的公式都是針對所需提取的子字符串完全由數字組成,如果要提取的數字中有分隔符(例如電話號碼)則無法使用。當然,可以先執行替換操作來去掉字符串中的分隔符,這可能會更複雜些。 本文僅涉及被提取的字符串內包含唯一的數字子字符串的情況。 我們以示例來講解。
  • 如何用Excel從字母數字字符串中提取數字
    此解決方案的基本原理是搜索並返回字母數字字符串中的第一個數字,然後只返回其後的數字。   算法   此解決方案包括創建公式以完成下列任務:   1.將字母數字字符串分解為單獨的字符。   2.確定分解後的字符串中是否有數字。
  • 用基礎技巧提取字符串中的數字
    用基礎技巧提取字符串中的數字今天咱們來說說從字符串中提取數字的技巧
  • SQL字符串數字提取
    在工作中遇到了這樣一個問題,如何提取某個字符串欄位中的數字?例如:A30B40C50D60 。
  • 手把手教你,學會Excel字符串提取
    第一參數text為要提取的字符串或單元格引用,第二參數[num_chars]為可選參數,表示要提取的字符數量,省略時默認提取一個字符,即提取字符串最左端或最右端的一個字符。第一參數為文本字符串時,需要用一對半角雙引號將其包含,如圖10-51所示。
  • 用公式提取Excel單元格中的漢字
    對於一個混雜各種字母、數字及其他字符和漢字的文本字符串,要提取其中的漢字,在Excel中通常可用下面的公式。
  • Excel從字符串中「提取數字」最簡單的方法
  • excel文本函數應用:單元格中的數字和字母,如何判斷?
    如何快速判斷單元格字符是否包含數字和字母呢?在規範編碼、密碼、用戶名的時候,我們經常要查證某一類字符串是否包含數字、英文、數字與英文的組合,甚至字符串的開頭是否是數字等。很簡單,利用Code、Char、Find、Search文本函數搭配Count函數即可解決這個問題。另外,關於轉換字母大小寫、刪除字符前後兩端的空格等,我們今天也會介紹。學習更多技巧,請收藏關注部落窩教育excel圖文教程。
  • 將字符串中的數字相加求和
    上圖字符串中包含5個數字:1,2,3,4,5,要求對其相加求和,那麼第一步需要將字符串中的數字分離出來,我們採用MID函數將A1B2C3D4F5,全部提取出來,公式如下:=MID(E3,ROW"&LEN(E3))),1)此函數中使用了數組
  • 數字與字符串在Excel、SQL與Python中的轉換方法
    二、數字與字符串數據類型的轉換1.1、Excel公式數字轉字符串只需要將數字用連接符號連接空格即可,字符串轉換數字將字符串乘以1,或者用雙負號(--),從上面截圖中我們發現幾個問題:第1個問題是日期在轉換數據類型的時候變成了44065,這是什麼意思呢?
  • 提取Excel單元格中的英文、漢字、數字,用Power Query輕鬆解決!
    日常工作中都會遇到一些不規範的數據,對於數據的提取是個頭疼的事情,今天教大家用Power Query快速提取你想要的內容,超簡單,又實用的技巧。1、提取英文在只有中英文混合的自字符串中我們可以這樣提取英文。A 定位表格位置,點擊數據-獲取和轉換-從表格,這時候數據自動加載到Power Query編輯器中。
  • Excel中提取字符常用實例
    要求:提取「★」前面的內容。詳見下圖。  方法:在B1單元格輸入公式:=LEFT(A1,FIND("★",A1)-1),確定,即可提取「★」前面的字符串,向下複製公式提取完成。  實例二:A列是一些有數字相加的字符串,如何將3個數字分別提取出並顯示在B、C、D列中。詳見下圖。
  • 一個EXCEL字符串提取的高級方法
    一個專注分享工作小技巧的數據分析人。我將不定期分享自己的經歷,歡迎大家關注我,共同學習、共同進步!各位客官姥爺好,歡迎光臨,今天您們要吃點什麼菜呢?客官A:EXCEL有啥快速提取字符串中漢字或數字的方法,比如這樣的:如何分割上面字符串中的漢字和數字?這個道菜,您稍等,馬上來。
  • 在Excel中提取數字,最好用的3種方法!
    2.數字統一位於文本最左側、最右側或中間固定起始位置。數字初始位置固定,可以直接用LEFT、 RIGHT或MID提取,無需確認起始位置。唯一需要計算的參數就是文本長度。這裡由於混合文本不含單字節字符(英文字符或半角符號),我們可以使用LEN和LENB來確定數字長度。
  • Excel教程:在Excel中提取數字,最好用的3種方法!
    前面我們分享了不用函數公式提取數字的5種方法。今天我們分享用簡單公式從混合文本中提取數字的方法。因為採用的公式很簡單,所以總體來說只適合數字在文本中的位置有一定規律的情況。如果想用公式提取沒有位置規律的數字,那就得看我們下一篇教程。從理論上來說,我們應當避免將數字和文字填寫在同一個單元格中,從而產生混合文本,影響進一步的數據處理和分析。