看板 Office 關於我們 聯絡資訊
從英數字元字串中擷取數字 http://office.microsoft.com/zh-tw/excel/HA011549011028.aspx?pid=CL100570551028 套用至: Microsoft Office Excel 2003 本文作者是 Microsoft 最有價值的專業人員 (MVP,Most Valuable Professional) Ashish Mathur。如需詳細資訊,請造訪 Microsoft MVP 網站 (英文)。 我們將在本文中針對一道能將數字從字串中擷取出來的公式進行說明。此公式適用於下列 字串: * 字母字元和數字字元個別叢集的字串,例如 abc123 或 678sfr。 * 字母字元和數字字元並非個別叢集的字串,例如 abc15tni。 問題 如何將某個英數數元字串中的數字部份擷取出來。例如:如果儲存格 A1 包含字串「 abc123」,則將值 123 傳回儲存格 B1 中。 解決方案 此解決方案的潛在邏輯是找出該英數字元字串中的第一個數字,並僅傳回該數字及其後的 所有數字。 演算法 此解決方案涉及建立能夠達成下列任務的公式: 1. 將英數字元字串打散為個別的字元。 2. 判別打散的字串中是否有數字的存在。 3. 判別數字在英數字元字串中的位置。 4. 計算英數字元字串中的數字總數。 我們將會分別考慮上述任務,再整合出能夠產生最終結果的公式。 將英數字元字串打散為個別的字元 我們將在此使用 MID 函數。MID 會自文字字串中您所指定的位置開始,傳回特定數目的 字元 (依據您指定的字元數目)。該函數的語法為: MID(text,start_num,num_chars) * text 包含您想要擷取之字元的文字字串。 * Start_num 您想要在 text 中擷取之第一個字元的位置。text 中第一個字元的 start_num 為 1,依此類推。 * Num_chars 指定您想要讓 MID 從 text 中傳回多少字元。 本範例所使用的公式為: =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 鍵,將此公式輸入為陣列。 其他範例 (圖) http://office.microsoft.com/global/images/default.aspx?AssetID=ZA011549041028 如果要進一步測試此公式,請將下圖中的資料輸入空白工作表的儲存格 A1:A7 中。 字串轉換範例 在儲存格 B1 中輸入此公式,再使用「自動填滿」將此公式複製到儲存格 B2:B7 中 (記 得要按 CTRL+SHIFT+ENTER 鍵)。 值得一提的是,如果字串是 yur09875reew ,而您使用了乘以 1 的公式,則欄 B 中的結 果將會是 9875 而非 09875。這是因為 0*1=0,因此 0 將會遭到忽略,並傳回 9875 這 個結果。如果您希望傳回的結果是 09875,則請不要將最後的公式乘以 1。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.164.59.188
ljuber:好範例 寄回信箱慢慢研究 感謝~ 12/01 18:20
JieJuen:^^ 這篇很詳細~~ 12/01 22:20
lovranfun: 非常實用推一個 12/02 13:57