2017年1月18日 星期三

如何從"字母數字的字串"中提取數字

問題: 如何提取字母數字的字串中數字部分?
  例如:如果儲存格A1包含的是字串“abc123”,則將值123返回儲存格 B1 中。
解決方案
  此解決方案的基本原理是搜索並返回字母數位字串中的第一個數位,然後只返回其後的數字。
演算法
  此解決方案包括創建公式以完成下列任務:
1.
將字母數位字串分解為單獨的字元。
2.
確定分解後的字串中是否有數位。
3.
確定數位在字母數位字串中的位置。
4.
計算字母數位字串中數位的數量。
  我們將分別考慮這些任務,然後將各公式整合在一起以得到最終結果。
  將字母數位字串分解為單獨的字元
  請在此使用 MID 函數。MID 可以根據所指定的字元的數量,從所指定的位置開始,從文本字串中返回特定數量的字元。
  此函數的語法是:
  MID(text,start_num,num_chars)
   Text  文本字串包含的是要提取的字元。
  Start_num  要從文本中提取的第一個字串的位置。文本中第一個字元佔據 start_num 1,以此類推。
  Num_chars  指定要 MID 從文本中返回的字元數量。
  對於我們的示例,公式為:=MID(A1,ROW($1:$9),1) 此公式可以分解字母數位字串,並且實際上會將字元置於工作表的不同行內。例如,對於字母數位字串 abc123,其所有 6 個字元都將被分開。
注釋
  可將數值 9 適當增大為任何更大的數值,以適應更長的字串。在此示例中,最大字串長度為 9 值得一提的是,字串分解之後,“1”“2”“3”將被看作文本而不是數位。要將存儲為文本的數位轉換成數位,請用 1 乘以此公式,例如:=1*MID(A1,ROW($1:$9),1) 確定分解後的字串中是否有數位 在此我們將使用 ISNUMBER 函數,此函數可以確定字母數位字串中是否有數位。公式現在變成了: =ISNUMBER(1*MID(A1,ROW($1:$9),1))
  如果字串中有數位,則結果將為 TRUE,否則結果將為 FALSE
  確定數位在字母數位字串中的位置。
  現在我們將通過在上一段中提到的分解後的字串的結果中查找 TRUE 值來確定數位的位置。
  在此我們將使用 MATCH 函數。經過修改的公式現在變為:=MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$9),1)),0)
要點
  必須通過按 Ctrl+Shift+Enter 將此公式作為陣列進行輸入。
  如果字串是 abc123,則此公式產生的結果將是 4,這就是字母數位字串中第一個數位字元的位置。
  計算字母數位字串中數位的數量
  現在的任務是計算字串中數位的數量,以確定返回字母數位字串中第一個數位之後要返回的字元。
  如上所述,可通過用 1 與其相乘,將字母數位字串中存儲為文本的數位轉換成數位。例如, =1*MID(A1,ROW($1:$9),1)
  將存儲為文本的數位轉換成數位之後,可以通過使用 COUNT 函數對其進行計數。可通過輸入以下公式計算數位的數量:=COUNT(1*MID(A1,ROW($1:$9),1))
整合各公式
  現在我們將使用 MID 函數把此公式的各部分整合在一起,如以下示例所示。 =MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$9),1)),0),COUNT(1*MID(A1,ROW($1:$9),1)))
  從本質上說,此問題可陳述為:確定第一個數位在字母數位字串(在儲存格 A1 中)中的位置。返回此數位及其後的數位。
  要將得到的字元轉換成數位,請用 1 乘此公式。雖然對此並不嚴格要求,但如果要對結果執行數學運算,則應該如此操作。
  下面是要輸入儲存格 B1 中的最終公式: =1*MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$9),1)),0),COUNT(1*MID(A1,ROW($1:$9),1)))
要點
  必須通過按 Ctrl+Shift+Enter 將這些公式作為陣列進行輸入。
  在此值得一提的是,如果字串是 yur09875reew,而且您使用的是已乘 1 的公式,則列 B 中的結果將是 9875 而不是 09875。因為 0*1=0,所以 0 被忽略了,返回的結果是 9875。如果想得到結果 09875,則不要用 1 乘以整個公式。



沒有留言:

張貼留言