2013-01-03 318 views
2

我有一個包含長文件夾和文件名列表的列。文件夾和文件名稱有所不同。我想從列中提取文件名到另一列,但我努力在Excel中做到這一點。列數據的按第一個分隔符分割字符串

例子:(文件和文件夾的改變,以隱藏不應該是公共信息)

c:\data\1\nc2\media\ss\system media\ne\d - wnd enging works v5.swf 
c:\data\1\nc2\media\ss\special campaigns\samns dec 2012\trainerv5.swf 
C:\Local\Messages\17362~000000001~20131231235910~4.MUF 
c:\data\1\nc2\media\ss\system media\tl\nd - tfl statusv4.swf 
c:\data\1\nc2\media\ss\system media\core\ss_bagage v2.swf 

我知道我應該能夠從右側搜索到的「\」中第一次出現,但我無法弄清楚語法。

非常感謝

UPDATE:

=RIGHT(B2,LEN(B2)-SEARCH("\",B2,1))應該工作,但它顯示不正確的結果。但是如果我改變它來搜索「。」它拉出文件擴展名。所以我失蹤

回答

2
=RIGHT(A1,LEN(A1)-FIND("~",SUBSTITUTE(A1,"\","~",LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))) 

複製它在任何列說b拖垮一個關鍵項目,你做

+3

它如何工作將是很好的一點解釋。 – Kami

1

VBA是如果你有很多的文件解析一個更有效的選擇。創建一個模塊並添加如下:

Function GetFileName(file As String) As String 

    Set fso = CreateObject("Scripting.FileSystemObject") 

    GetFileName = fso.GetFileName(file) 

End Function 
0

有幾種不同的方式來獲得一個字符串,其中包括以下公式最後一個斜線後面的文本。在這個例子中,H15是包含要搜索的字符串的單元格。如果找不到斜槓,則返回「 - 」(破折號)字符。

=iferror(RIGHT(H15,LEN(H15)-SEARCH("|",SUBSTITUTE(H15,"/","|",LEN(H15)-LEN(SUBSTITUTE(H15,"/",""))))),"-") 

該公式首先在該字符串中查找斜槓的數量。 LEN給出了字符串的總長度,並且在使用SUBSTITUTE消除原始字符串中的斜槓之後,字符串的LEN不帶斜槓 - 區別在於斜槓的數量。

然後,用一個標記字符(我用「|」)替換最後的斜線。通過搜索標記,您可以找到斜槓後面的位。字符串的總長度減去標記開始的位置,可以告訴您從右側開始需要輸入多少個字符,然後執行此操作。

0

如果你需要更通用的字符串解析,並願意用VBA一點點,你可以使用split功能通過Jamie Bull in his answer to this question on SuperUser.

他的功能將使用任何字符作爲建議你選擇分割字符串成段並返回您選擇的分段。

我在這裏複製傑米的功能,方便參考:

Function STR_SPLIT(str, sep, n) As String 
    Dim V() As String 
    V = Split(str, sep) 
    STR_SPLIT = V(n - 1) 
End Function