在EXCEL文檔里想從很長的文件路徑中取得文件名,【數據】→【分列】是個不錯的選擇,但用函數會顯得更高大上一些。
首先,需要獲取最后一個"\"所在的位置。
方法1:
FIND("@",SUBSTITUTE(A1(字符串所在單元格),"\","@",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))
這個比較好理解,只要理解了SUBSTITUTE第四個參數的作用就好。
SUBSTITUTE第四個參數:可選。 指定要用 new_text 替換 old_text 的事件。 如果指定了 instance_num,則只有滿足要求的 old_text 被替換。 否則,文本中出現的所有 old_text 都會更改為 new_text。
例:
所以,整個函數的意思是把字符串中最后一個"\"替換成字符串中沒出現過的其他字符(如“@”),然后在查找這個沒出現過的字符所在的位置就可以了。
方法2:
LOOKUP(1,0/(MID(A1(字符串所在單元格),COLUMN(1:1),1)="\"),COLUMN(1:1))
這個理解起來比較難。
先來理解COLUMN(1:1)的意思:
在空白EXCEL文檔里選中第一行,在編輯欄里輸入=COLUMN(1:1),再按Ctrl+Shift+Enter組合鍵
可以看到COLUMN(1:1)的結果是一個1~16384的數組。
再看(MID(A1(字符串所在單元格),COLUMN(1:1),1)="\"),作用是一個個取出字符串中的字符,並判斷是否與"\"相同,相同則返回TRUE,否則返回FALSE。
0/TRUE得0,0/FALSE得
所以0/(MID(A1(字符串所在單元格),COLUMN(1:1),1)="\")的結果是
所以LOOKUP(1,0/(MID(A1(字符串所在單元格),COLUMN(1:1),1)="\"),COLUMN(1:1))的結果是
EXCEL幫助里的備注:
本例中的LOOKUP函數在0/(MID(A1(字符串所在單元格),COLUMN(1:1),1)="\")里是找不到1的,所以它找到的是0,但在0/(MID(A1(字符串所在單元格),COLUMN(1:1),1)="\")里有多個0,從結果來看,它找到的是最后一個0。(為什么?在EXCEL幫助里沒有找到相關說明)
聲明:本文是本人查閱網上及書籍等各種資料,再加上自己的實際測試總結而來,僅供學習交流用,請勿使用於商業用途,任何由此產生的法律版權問題概不負責,謝謝。