Excel從右向左查找

平日學習點滴


Excel從右向左查找

今天看一個小問題,是前幾天遇到的,就是要在Excel裏面實現從右向左查找。比如給定字符串“abc,defg,hi,jkl”,需要找到最右一個逗號的位置(即12),或者最右一個逗號右邊的部分(即“jkl”)。

Excel裏面字符串查找用的FIND函數,只能從左向右(可以指定起始位置)地進行字符串查找。如果想要找到最右邊的待查字符串,就要稍微費點兒勁兒了。爲了方便起見,下面稱待查字符串爲分隔符。

如果分隔符的個數是已知且確定的(比如IP地址中的小數點),可以通過多個FIND函數嵌套來實現。但這個其實是從左到右查找第n個。如果分隔符的個數不確定,這個方法就不太合適的。

我的處理方法是這樣的,假設單元格A1存放着包含分隔符的完整字符串(如上面提到的“abc,defg,hi,jkl”),那麼查找最右一個逗號的公式爲:

=FIND(CHAR(1),SUBSTITUTE(A1,",",CHAR(1),LEN(A1)-LEN(SUBSTITUTE(A1,",",""))))

這個公式的結果顯然是12。

看起來很複雜,其實一步步拆解開並不是太難,基本的原理是這樣的:

  1. SUBSTITUTE(A1,",",""):把原字符串中的逗號全部刪除(替換成空字符串),得到臨時字符串text1;

  2. LEN(A1)-LEN(text1):用原字符串的長度減去text1的長度,即可知道原字符串中總共有多少個逗號,num2;

  3. SUBSTITUTE(A1,",",CHAR(1),num2):利用SUBSTITUE函數,把原字符串中的最後一個逗號替換成特殊字符CHAR(1),得到臨時字符串text3;

  4. FIND(CHAR(1),text3):在text3中查找特殊字符CHAR(1),其位置就是原字符串中最後一個逗號的位置pos。

真是一個奇妙的方法。

找到位置後,要取出左邊或者右邊的內容就很簡單了,公式分別是(用pos代替那個複雜的FIND函數):=LEFT(A1,pos-1)=RIGHT(A1,LEN(A1)-pos)

補充:

上面那個公式只是適用於單個字符的查找,如果分隔符是多個字符,就需要稍微修改一下。假設單元格B1裏面存放着分隔符本身,那麼公式可以修改爲:

=FIND(CHAR(1),SUBSTITUTE(A1,B1,CHAR(1),(LEN(A1)-LEN(SUBSTITUTE(A1,B1,"")))/LEN(B1)))

唯一的變化就是上述的第2步,原字符串的長度減去text1的長度後,要除以分隔符本身的長度,纔是分隔符的個數。

在這種情況下,取(最右分隔符)右邊的子串的公式也要相應地修改爲:=RIGHT(A1,LEN(A1)+1-LEN(B1)-pos)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章