標籤:

從文本中截取的套路

從文本中截取內容通常都會用到Left、Right、Mid、Find這幾個函數。這幾個函數本身並不難,參數也比較少,很容易理解。但是用他們組合起來,或者加上其他函數組合起來截取指定的內容,那就不一定簡單了。今天我們從基礎開始到略深入,講一下截取的幾個套路。

基礎

  • Left的英文意思是左邊,作為Excel函數就代表從左邊開始截取字元。

  • Right的英文意思是右邊,作為Excel函數就代表從右邊開始截取字元。

  • Mid的英文意思是中間,作為Excel函數就代表從中間開始截取字元,當然也可以從第一個字元開始截取。

  • Find的英文意思是查找,作為Excel函數就代表查找一個字元串在另一個字元串中的位置,並且可以指定從第幾個字元開始查找,注意這裡指的是從第幾個字元開始搜索,返回的仍然是它本身所在的位置。

  • 這幾個函數的語法都比較簡單,從字面意思也很容易判斷如何使用。

    語法

  • LEFT(text, [num_chars])

  • RIGHT(text,[num_chars])

  • MID(text, start_num, num_chars)

  • FIND(find_text, within_text, [start_num])

  • 這幾個函數都有一個按位元組處理的函數就是在函數結尾加上B(B代表Byte),在計算機中,一個漢字、全形符號等代表兩個位元組,所以大家需要注意區分字元個數、位元組個數。

    這些函數跟上面的函數具有相似的語法,如下:

  • LEFTB(text, [num_bytes])

  • RIGHTB(text,[num_bytes])

  • MIDB(text, start_num, num_bytes)

  • FINDB(find_text, within_text, [start_num])

  • 大家注意看Left、Right、Find、LeftB、RightB、FindB函數的最後一個參數都是可選的,如果不填的話就默認為1。

    簡單示例

    通過以下幾個示例,我們可以先簡單了解一下這幾個函數。

    這幾個函數看起來簡單,但是組合起來也可以很複雜,運用得當的話也能解決很多實際問題。

    經常見到前面加負號或兩個負號?

    這是因為Left、Right、Mid函數返回的結果是文本,如果你要截取數字並得到真正的數值,就得用兩個負號將它變成真正的數值。當然了,我們也可以用其他方式來轉換,比如乘以1。

    1應用實例:提取數字

    情景一:數字在左邊起始位置

    思路:

    1、從左邊開始截取字元,分別截取1個、2個、3個字元……

    2、然後將截取的值轉換成數值查找最大的值。

    公式1:

    =-LOOKUP(,-LEFT(A2,ROW($1:$99)))

    公式2:這是數組公式,需要按Ctrl Shift Enter

    =MAX(IFERROR(--LEFT(A3,ROW($1:$100)),0))

    解釋:

  • 公式中ROW($1:$99)是為了簡便起見,現實中一般也不會有這麼大的數。Right加上這個數組參數就表示從左邊開始分別截取1~99個字元。

  • Left前面的負號表示將Left截取的結果轉換成負數,如果是文本,那麼就轉換成錯誤值。

  • Lookup第一個參數省略了,其實第一個參數就是個0,第二個參數除錯誤值外都是負數,這樣就找到了最後一個負數,也就代表了長度最大的一個有效數值。

  • 最後Lookup外面再用一個負號就將轉換成正值了。

  • 第2個公式中的IfError是為了屏蔽將文本轉換成數值造成的錯誤值。

  • 關於Lookup的用法,請參考以下文章。

    弱水三千,只取一瓢 - Lookup經典用法三例

    情景二:數字在右邊結束位置

    公式跟上面的比較相似,只不過是改成用Right從右邊開始截取。

    公式1:

    =-LOOKUP(,-RIGHT(A9,ROW($1:$99)))

    公式2:這是數組公式。

    =MAX(IFERROR(--RIGHT(A10,ROW($1:$100)),0))

    情景三:數字在不確定的位置

    這時就需要用到Mid了,因為Mid可以從指定的位置開始截取字元。

    思路:

    1、先找到第一個數字出現的位置,然後從這個位置開始截取字元,截取1個、2個、3個……

    2、將截取的內容轉換成數值並求最大的那個數。

    公式1:數組公式

    =-LOOKUP(,-MID(A15,MATCH(,0/MID(A15,ROW($1:$99),1),),ROW($1:$99)))

    說明:

  • ROW($1:$99)是簡略的寫法,如果字元數超過99個,則可以將99改為更大的數,或者用ROW(INDIRECT("1:"&LEN(A15)))來代替(見公式2)。

  • 0/MID(A15,ROW($1:$99),1),如果是數字,則結果是0,否則結果是錯誤值。

  • MATCH(,0/MID(A15,ROW($1:$99),1),)查找第一個數字出現的位置。

  • MID(A15,MATCH(,0/MID(A15,ROW($1:$99),1),),ROW($1:$99))從第一個數字的位置開始截取,分別截取1~99個字元,然後用負號轉換成負值,如果是文本則變成錯誤值。

  • 最後用Lookup查找最後一個負數數值,最外面用一個負號轉換成正數。

  • 公式2:數組公式

    =-LOOKUP(,-MID(A16,MATCH(,0/MID(A16,ROW(INDIRECT("1:"&LEN(A16))),1),),ROW($1:$99)))

    公式3:數組公式

    =MAX(IFERROR(--MID(A17,MATCH(,0/MID(A17,ROW($1:$99),1),),ROW($1:$99)),0))

    說明:這個Max的公式跟上面的情境中使用原理一致。

    公式4:數組公式

    =-LOOKUP(,-MID(A17,MIN(FIND(ROW($1:$10)-1,A17&1/17)),ROW($1:$99)))

    說明:這裡用Find查找數字出現的位置,注意其中1/17這種用法,相信很多同學都不明白,使用1/17是因為1/17的結果中包含0~9所有數字,是為了Find的容錯處理,可以簡化公式,當然可以採用直接寫數字這種方法"1234567890"(見公式5),也可以用IfError來容錯(見公式6)。

    公式5:數組公式

    =-LOOKUP(,-MID(A18,MIN(FIND(ROW($1:$10)-1,A18&"1234567890")),ROW($1:$99)))

    公式6:數組公式

    =-LOOKUP(,-MID(A19,MIN(IFERROR(FIND(ROW($1:$10)-1,A19),9E 307)),ROW($1:$99)))

    總之各種公式都是用相應的套路,學會之後靈活組合就可以了。

    情景四:數字有前導0存在

    在情景3的基礎上又增加了一點,數字中有前導0存在,需要提取全部的數字。

    公式:數組公式

    =MID(A26,MIN(FIND(ROW($1:$10)-1,A26&1/17)),MAX(IF(ISNUMBER(--MID(A26,ROW(INDIRECT("1:"&LEN(A26))),1)),ROW(INDIRECT("1:"&LEN(A26))),0))-MIN(IFERROR(FIND(ROW($1:$10)-1,A26),E9 307)) 1)

    說明:

  • 這裡有前導0存在就不能使用處理數值那樣的方法了。

  • 求最後一個數字出現的位置的公式MAX(IF(ISNUMBER(--MID(A26,ROW(INDIRECT("1:"&LEN(A26))),1)),ROW(INDIRECT("1:"&LEN(A26))),0)),看起來很複雜,其實原理就是每次截取一個字元,負負號轉換後看看是不是數字,如果是的話就記錄位置,否則的話就記錄0,看最大的位置是哪個。

  • 情景五:金額填充到每個單元格

    如下圖所示,將金額填充到後面的每個單元格中。

    在C1中輸入以下公式,然後向右拉,向下拉。

    =LEFT(RIGHT(REPT(" ",11)&"¥"&$A2*100,12-COLUMN(A:A)))

    解釋說明:

  • 從「億」到「分」總共11個單元格,先把數字乘以100是為了獲取小數位,並且可以去掉包含小數點的麻煩。

  • REPT(" ",11)是為了填充空格,當數字位數不夠時可以截取到空格。

  • 12-COLUMN(A:A),當在C列時,表示截取11個字元,當在M列時表示截取1個字元。

  • 先用Right截取相應長度的字元,再用Left截取最左邊的字元。

  • 2應用實例:提取身份證中的信息

    身份證中1~6位數表示地區信息,7~14位表示出生年月日(YYYYMMDD格式),15~17位表示同一地區的同年同月同日出生的人的順序號,奇數表示男,偶數表示女。最後一位數字是校驗碼。

    所以我們可以在C2單元格輸入以下公式來獲取出生日期。

    =TEXT(--MID(B2,7,8),"0-00-00")

    注意:

    這個結果是文本格式,如果需要轉換成真正的日期,只需要在Text前面加上兩個負號即可,如下。

    =--TEXT(--MID(B2,7,8),"0-00-00")

    在D2單元格輸入以下公式。

    =IF(MOD(MID(B2,15,3),2),"男","女")

    說明:

  • Mod是求餘數的函數,MOD(MID(B2,15,3),2)結果是1表示是奇數,代表男性,結果是0時表示是偶數,代表女性。

  • 在公式中數字0代表false,除此之外的其他數字都代表True。

  • 小夥伴們,這些套路你都學會了嗎?

    暫時沒搞明白也沒關係,收藏起來,說不定哪天就用到了呢!

    --End--


    推薦閱讀:

    行走世間,提防套路
    一點乾貨-Logo創意說明的寫作套路
    拉丁舞的提高——從基本功到套路
    顯氣質的配色套路,穿出高級感!
    網路外匯理財有什麼陷阱?

    TAG:套路 | 文本 |