Excel:从父文件夹到子文件夹获取最后一个字符

时间:2014-12-21 20:13:27

标签: excel excel-formula

非常需要你的帮助。我需要从文件夹名称和子文件夹(如果有)获取最后一个字符。为了清楚地说明我的观点,我将在下面给出一个例子。

例如1:

E:\User\Images\Main_Folder_**1**\SubFolder**1**\Sub_Folder**2**\SubFolder**3**\SubFolder**4**\file.txt

需要获得字符串" 11234 "。

为Eg2:

E:\User\Images\Main_Folder_**1**\SubFolder**2**\Sub_Folder**5**\SubFolder**6**\SubFolder**9**\file.txt

需要获得字符串" 12569 "。

我尝试过以下代码来获取最后一个字符。

=FIND("@",SUBSTITUTE(A1,"\","@",(LEN(A1)-LEN(SUBSTITUTE(A1,"\","")))/LEN("\")))

但我也需要搜索子文件夹(如果有的话)。

真的很感激,如果你们能提供任何帮助。感谢。

2 个答案:

答案 0 :(得分:0)

问题的可能解决方案是创建UDF VBA,如下所示:

1)。将模块添加到Excel工作簿(默认为Module1)并在该模块中放置用户定义函数(UDF):

Option Explicit
Public Function GetLastChars(InputText As Range) As String
    Dim tmp As String, ret As String
    'skip E:\User\Images\ as per your example
    tmp = Replace(InputText.Value, "E:\User\Images\", "")
    'loop through the rest of subfolders
    Do While (InStr(tmp, "\")) > 0
        'adding the last letters to return var
        ret = ret & Mid(tmp, InStr(tmp, "\") - 1, 1)
        'progressing to the next subfolder
        tmp = Mid(tmp, InStr(tmp, "\") + 1)
    Loop
    'concatenated last letters of subfolders
    GetLastChars = ret
End Function

2)假设按照你的例子将原始数据(路径)插入单元格“A1”中,在单元格“B1”中输入公式=GetLastChars(A1);相应地,在单元格“B2”中输入公式:=GetLastChars(B1)

对应于您的示例:E:\User\Images\Main_Folder_1\SubFolder1\Sub_Folder2\SubFolder3\SubFolder4\file.txt返回值为11234。

此UDF将适用于​​任意数量的子文件夹(根据您的示例跳过根部E:\User\Images)。

例如:将路径输入为E:\User\Images\Main_Folder_1\SubFolder1\Sub_Folder2\SubFolder3\SubFolder4\SubFolder5\SubFolder6\SubFolder7\file.txt公式将返回 11234567

对于路径字符串,例如:E:\ User \ Images \ Main_Folder_1 \ SubFolder1 \ Sub_Folder2 \ SubFolder3 \ SubFolder4 \ SubFolder5 \ SubFolder6 \ SubFolder7 \ SubFolder8 \ SubFolder9 \ SubFolder0 \ file.txt它返回 11234567890 等等。

希望这会有所帮助。最好的问候,

答案 1 :(得分:0)

如果您的源数据与您显示的一样;始终以E:\ User \ Images开头, IF ,最后一个字符始终为单个数字 IF 始终为< strong> 5 文件夹/子文件夹,您可以尝试:

=SUMPRODUCT(--RIGHT(TRIM(MID(SUBSTITUTE(SUBSTITUTE(A1,"E:\User\Images\",""),"\",REPT(" ",99)),(ROW(INDIRECT("1:5"))-1)*99+1,99)),1)*10^{4;3;2;1;0})

否则我会建议用户定义函数:

Option Explicit
Function GetLastFolderChar(S As String) As String
    Dim T() As String, U As String
    Dim I As Long
S = Replace(S, "E:\User\Images\", "")
T = Split(S, "\")

For I = LBound(T) To UBound(T) - 1
    U = U & Right(T(I), 1)
Next I

GetLastFolderChar = U

End Function