excel怎么同時定位字符串中的第一個和最后一個數字

在很多情況下,我們都面臨著需要確定字符串中第一個和最后一個數字的位置的問題,這可能是為了提取包圍在這兩個邊界內的子字符串 。然而,通常的公式都是針對所需提取的子字符串完全由數字組成,如果要提取的數字中有分隔符(例如電話號碼)則無法使用 。當然,可以先執行替換操作來去掉字符串中的分隔符,這可能會更復雜些 。
本文僅涉及被提取的字符串內包含唯一的數字子字符串的情況 。
我們以示例來解 。先看一下要提取的數字中沒有分隔符的情形,例如在單元格A1中的字符串如下:
Account No. 1234567890: requires attention
顯然,我們要提取出1234567890 。
下面是我們曾經使用的一個公式:
=-LOOKUP(1,-(MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1/17)),ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))))&”**0″))
注意,必須在MID函數生成的值的末尾添加“**0”,以保證能夠在任何情況下都得到正確的結果 。例如,如果單元格A1中的字符串是:
Account No. 12-Jun: requires attention
使用沒有添加“**0”的公式:
=-LOOKUP(1,-(MID(A2,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A2&1/17)),ROW(INDEX(A:A,1):INDEX(A:A,LEN(A2))))))
返回的結果不是12,而是43994,即日期2020-6-12對應的序數 。連接字符串“** 0”后,確保類似于“12–Jun”的字符串變為“12–Jun**0”,這樣Excel不會將它們認為數字 。同樣,這也適用于與科學記數法格式的數字相似的字符串 。
當然,這樣的字符串還必須具有使任何數字保持不變的特性 。字符串“**0”等效于“E0”,即表示索引為0的科學計數法,與10 ^ 0一致,因此可保證以這種形式表示的任何數字都將是不變 ??梢栽诠ぷ鞅碇羞M行下列測試來驗證:
=0+(147&”**0″)
返回147 。
=0+(147&”**2″)
【excel怎么同時定位字符串中的第一個和最后一個數字】返回14700 。
這種方式比“E0”更好,例如:
=-LOOKUP(1,-(MID(A2,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A2&1/17)),ROW(INDEX(A:A,1):INDEX(A:A,LEN(A2))))&”E0″))
得到的結果是36689,因為提取的子字符串為“12-JunE0”,Excel認為是日期2000-6-12 。并且,“E”在不同的環境中可能有不同的解釋 。
好了!下面讓我們看看一個相似的例子,但要提取的子字符串數字中包含有分隔符:
Account No. 1-234-5678-90: requiresattention
使用上面給出的公式:
=-LOOKUP(1,-(MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1/17)),ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))))&”**0″))
返回1,而不是我們想要的1-234-5678-90 。
正如上文提出的,先刪除分隔符并不是一件簡單的事:
=-LOOKUP(1,-(MID(SUBSTITUTE(A1,”-“,””),MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1/17)),ROW(INDEX(A:A,1):INDEX(A:A,LEN(A1))))&”**0″))
乍一看似乎可以,但返回的結果是1234567890 。留給我們的是,如何在正確的位置重新插入分隔符?當然,如果所給字符串的格式是固定的,例如電話號碼 。然而,即便如此,使用多個REPLACE/SUBSTITUTE函數可能使公式更復雜 。
本文尋找的是如何通過確定字符串中的第一個和最后一個數字來提取出子字符串的一種通用解決方案,而不管分隔符是什么、有多少,并且不需要執行替換操作 。
在前面的一系列文章中,我們已經找到了一種非常合適的方法來確定字符串中第一個數字的位置,即MIN/FIND函數組合構造 。然而,找到一種等效的用于確定字符串中最后一個數字的結構并不容易,能夠實現這一點是關鍵 。
對于MID函數的參數num_chars:
=MID(A1,MIN(FIND({1,2,3,4,5,6,7,8,9,0},A1&1/17)),[someconstruction])

猜你喜歡