从字母数字字符串中提取数字
http://office.microsoft.com/zh-cn/excel-help/HA001154901.aspx
本文的作者是 Ashish Mathur,是一位 Microsoft MVP(最有價值專家)。有關詳細信息,請訪問 Microsoft MVP 網站(英文)。
在下文中,我將說明從以下各種情況中的字符串內提取數字的公式:
- 當字母字符和數字字符連在一起時,如 abc123 或 678sfr。
- 當字母字符和數字字符沒有連在一起時,如 abc15tni。
問題
如何提取字母數字字符串的數字部分。例如:如果單元格 A1 包含的是字符串“abc123”,則將值 123 返回單元格 B1 中。
解決方案
此解決方案的基本原理是搜索并返回字母數字字符串中的第一個數字,然后只返回其后的數字。
算法
此解決方案包括創建公式以完成下列任務:
我們將分別考慮這些任務,然后將各公式整合在一起以得到最終結果。
將字母數字字符串分解為單獨的字符
請在此使用 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 將這些公式作為數組進行輸入。
更多示例
要進一步測試此公式,請將下圖中的數據輸入空工作表中的單元格 A1:A7 中。
將此公式輸入單元格 B1 中,然后使用自動填充將此公式復制到單元格 B2:B7 中。(不要忘記按 Ctrl+Shift+Enter。)
在此值得一提的是,如果字符串是 yur09875reew,而且您使用的是已乘 1 的公式,則列 B 中的結果將是 9875 而不是 09875。因為 0*1=0,所以 0 被忽略了,返回的結果是 9875。如果想得到結果 09875,則不要用 1 乘以整個公式。
?
?
?
=-===========================
excel,index和match函數
http://zhidao.baidu.com/link?url=Xh98mraINFP6_OCjmONSmnW6CYRUFwtTJkypRaZ-xX3ppKQZTduuvIZ3J237MY2VTDOYxBdEHK0L1X2OWb5u4GMkV4jQO-ZKYGb3h3QBZxW
?
MATCH(要查找的內容,查找的區域,精確查找或近似查找)
這個函數可以返回要查找的內容在查找區域中的位置,參數0為精確查找,參1為近似查找
如
=MATCH(B7,A2:A4,0)?? 按圖中得出的值應為2
意思就是在A2至A4單元格區域中精確查找與B7單元格內容相同的單元格在這列區域中是第幾個
=MATCH(A7,B1:D1,0)?? 按圖中得出的值應為3
意思就是在B1至D1單元格區域中精確查找與A7單元格內容相同的單元格在這行區域中是第幾個
INDEX(待返回值所在的單元格區域,第某行,第某列)
這個函數可以返回在指定區域中第某行第某列所在的單元格內容
如
=INDEX(B2:D4,2,3)?? 按圖中得出的值應為D3單元格內容即40
在B2單元格至D4單元格中的第二行就是表格中的第三行,第三列就是D列,所以值為D3
如,取A列單元格區域中第5行的值,則公式為
=INDEX(A:A,5)??? 即返回A5單元格內容
如取第二行單元格中第10列的值,公式為
=INDEX(2:2,10)??? 即返回J2單元格內容
如在A列至G列行數為1至100行的單元格區域中找第23行,第4列單元格的內容,則公式為
=INDEX(A1:G100,23,4)?? 即返回D23單元格的內容
$是絕對引用符號
A1相對引用
$A1絕對引用列
A$1絕對引用行
$A$1絕對引用行和列
$在誰的前面就絕對引用誰
F4是在四種引用間相互轉換的快捷鍵(在編輯欄輸入公式時按下F4功能鍵可進行切換)
相對引用、絕對引用和混合引用是指在公式中使用單元格或單元格區域的地址時,當將公式向旁邊復制時,地址是如何變化的。
具體情況舉例說明:
????? 1、相對引用,復制公式時地址跟著發生變化,如C1單元格有公式:=A1+B1
當將公式復制到C2單元格時變為:=A2+B2
當將公式復制到D1單元格時變為:=B1+C1
????? 2、絕對引用,復制公式時地址不會跟著發生變化,如C1單元格有公式:=$A$1+$B$1
當將公式復制到C2單元格時仍為:=$A$1+$B$1
當將公式復制到D1單元格時仍為:=$A$1+$B$1
?????? 3、混合引用,復制公式時地址的部分內容跟著發生變化,如C1單元格有公式:=$A1+B$1
當將公式復制到C2單元格時變為:=$A2+B$1
當將公式復制到D1單元格時變為:=$A1+C$1
?????? 規律:加上了絕對地址符“$”的列標和行號為絕對地址,在公式向旁邊復制時不會發生變化,沒有加上絕對地址符號的列標和行號為相對地址,在公式向旁邊復制時會跟著發生變化。混合引用時部分地址發生變化。
http://office.microsoft.com/zh-cn/excel-help/HP010342940.aspx?CTT=1
http://office.microsoft.com/zh-cn/mac-excel-help/HA102928059.aspx?CTT=1
如果你要用VLOOKUP函數,則公式可以寫成
=VLOOKUP(A7,A$2:$D$4,MATCH(B7,B$1:D$1,)+1,)
或
=VLOOKUP(A7,A$2:$D$4,MATCH(B7,A$1:D$1,),)
?
?
==============
在相對引用、絕對引用和混合引用間切換
全部顯示 全部隱藏默認情況下,單元格引用是相對 (相對引用:在公式中,基于包含公式的單元格與被引用的單元格之間的相對位置的單元格地址。如果復制公式,相對引用將自動調整。相對引用采用 A1 樣式。)的。例如,當您引用單元格 A2 到單元格 C2,實際上引用的是左邊的兩列(C 減去 A)和同一行 (2) 中的單元格。包含相對單元格引用的公式會因為您將它從一個單元格復制到另一個而發生改變。例如,如果您將單元格 C2 中公式“=A2+B2”復制到 D2,D2 中的公式將向下調整一行成為“=A3+B3”。如果希望在復制時保留此示例中的原始單元格引用,需要在列(A 和 B)和行 (2) 之前加上美元符號 ($) 來使單元格引用變為絕對 (絕對單元格引用:公式中單元格的精確地址,與包含公式的單元格的位置無關。絕對引用采用的形式為 $A$1。)。然后,當您從 C2 復制公式 (=$A$2+$B$2) 到 D2,該公式仍然是完全相同。
在不頻繁的情況下,您可能希望使單元格引用變為“混合”,在前面的列值或行值之前加美元符號以“鎖定”列或行(例如,$A2 或 B$3)。若要更改單元格引用的類型:
下表總結了當將包含引用的公式向下和向右復制兩個單元格時引用類型的更新方式。
| $A$1(絕對列和絕對行) | $A$1(引用是絕對的) | |
| ? | A$1(相對列和絕對行) | C$1(引用是混合型) |
| ? | $A1(絕對列和相對行) | $A3(引用是混合型) |
| ? | A1(相對列和相對行) | C3(引用是相對的) |
?
==============
http://www.111cn.net/office/excel/50362.htm
LEN(A2) – LEN(SUBSTITUTE(A2, ” “, “”) 獲取字符串中空格的個數
SUBSTITUTE(A2, ” “, “-”, step1) 將最后一個空格替換為”-”
FIND(“-”, step2) 找到最后一個空格的位置
RIGHT(A2, LEN(A2) – step3) 返回最后一個空格之后的字符串
IF(ISERROR(FIND(” “, A2)), A2, step4) 字符串中沒有空格時不做處理,避免出現#VALUE!的結果
利用上面的函數我們來看一個查找字符串中*星號位置并取出
所以,要想查找字符串中的,*星號和?問號,必須在其前面加上這樣的一個符號 ~ 方能找到。
上表中,每個單元格都包含兩個*星號,同時還包含三組數字,但是,每組數字的長度都不一樣,有的長有的短。現在的問題是,如何把每個單元格中被*星號隔開的每數字分別取出來?
一、問題的分析
要想取出被兩個*星號隔開的三組數字,關鍵的問題在于,如何知道并獲取兩個*星號分別處于字符串中的哪個位置。
知道兩個*星號的位置后,我們就可以使用截取函數將三組數字分別取出來。
二、獲取兩個*星號的位置
獲取某個字符在字符串中所處的位置,可以使用SEARCH和SEARCHB函數來查找位置。
兩個函數的語法相同,如下:
SEARCH(find_text,within_text,start_num)
SEARCHB(find_text,within_text,start_num)
不過,兩個函數的區別在于,前者在查找的時候,把一個漢字的長度當作一個字符,后者則是以字節的方式來查找,一個漢字當兩個字節,所以,一個漢字的長度就為2。一般情況下,在中文英文數字特殊字符混合的字符串中查找,應該使用SEARCH函數。
把以上兩個函數翻譯成中文,其語法為:
SEARCH(要找的字符,包含字符的字符串,從串中的第幾個位置開始找)
SEARCHB(要找的字符,包含字符的字符串,從串中的第幾個位置開始找)
有了如上的函數基礎與理論指導,下面,我們開始查找兩個星號的位置吧。
①第一個*星號的位置
通過函數=SEARCH("~*",A1)即可獲取第一個星號的位置,處于第5位。
②第二個*星號的位置
第二個*星號的位置查找,就比較困難了,公式有點繞口令的感覺。
總之,公式如下:=
?
| 代碼如下 | 復制代碼 |
| SEARCH("~*",A1,SEARCH("~*",A1)+1) | |
看到了吧?上述的公式比較復雜,但是,卻也很好理解。
通過公式=SEARCH("~*",A1)可獲得第一個位置,那么,再第一個位置的基礎上加1,從這個位置開始繼續往下找,就可以找到第二星號的位置,所以,公式就是上圖中稍微繞口的函數了。
三、從帶有星號的字符串中提取數字
有了一二的基礎,現在,我們該是提取數字了。
①提前第一個星左邊的數字公式
?
| 代碼如下 | 復制代碼 |
| =LEFT(A1,SEARCHB("~*",A1)-1) | |
②提取中間那個數字的公式
?
| 代碼如下 | 復制代碼 |
| =MID(A1,SEARCHB("~*",A1)+1,(SEARCHB("~*",A1,SEARCHB("~*",A1)+1))-SEARCHB("~*",A1)-1) | |
?
?
?
==========================result
{=MID(A1,MATCH(TRUE,ISNUMBER(1*MID(A1,ROW($1:$9),1)),0),COUNT(1*MID(A1,ROW($1:$9),1))+(LEN(A1)-LEN(SUBSTITUTE(A1,".", ""))))}
總結
以上是生活随笔為你收集整理的从字母数字字符串中提取数字的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: excel多个工作表求和案例
- 下一篇: 我隐藏的Excel工作表 你别想取消