从路径中提取文件名(Microsoft Excel)
Barry有一个工作表,其中一列包含许多文件路径。他想要一种从每个路径中仅提取文件名(最后反斜杠右侧的部分)的方法。他想知道是否有一种无需使用“文本转列”功能的快速方法。
有几种不同的方法,具体取决于您是否要使用宏。
如果文件名长度相同,则只需使用RIGHT函数即可提取最后一个字符。 (此公式假定完整路径,文件名位于单元格A1中。)
=RIGHT(A1,11)
假定文件名始终为11个字符长,例如“ text001.txt”。如果每个实例中的文件名长度不同,则此方法将不起作用。相反,您可以尝试使用以下公式:
=MID(A1,FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1), LEN(A1)-LEN(SUBSTITUTE(A1,"\",""))))+1,LEN(A1))
请注意该公式两次使用SUBSTITUTE函数。在每种情况下,它都会用其他方式替换反斜杠(\)。第一次将它们全部替换为ASCII值1,第二次将其替换为空(空字符串),以便可以确定原始路径中有多少个反斜杠。 MID函数用于定位(在FIND和SUBSTITUTE函数的帮助下)路径中最后一个反斜杠的位置,并返回该点之后的所有内容。
如果您确定文件名的长度永远不会超过99个字符,则可以使用较短的公式:
=TRIM(RIGHT(SUBSTITUTE(A2,"\",REPT(" ",100)),99))
此公式将所有反斜杠替换为100个空格,从结果字符串中获取最右边的99个字符(该文件名将在其前面带有一串空格),然后修剪所有空格。
如果要使用宏,则可以创建一个宏,该宏将在路径中向后移动,直到找到最后一个反斜杠为止。然后,它在反斜杠之后返回所有内容。下面的示例从单元格B1开始,检查该单元格(单元格A1)右侧的所有内容,然后开始提取文件名。
|它将遍历A列中的所有单元格,并将文件名(如果有)放入B列。
Sub GetFileName1() Dim Delimiter As String Dim Target As String Dim sFile As String Dim J As Integer Dim iDataLen As Integer Delimiter = "\" Range("B1").Select Do While ActiveCell.Offset(0, -1).Value <> "" Target = ActiveCell.Offset(0, -1).Value iDataLen = Len(Target) sFile = "Delimiter Not Found" For J = iDataLen To 2 Step -1 If Mid(Target, J, 1) = Delimiter Then sFile = Right(Target, iDataLen - J) Exit For End If Next J ActiveCell.Formula = sFile ActiveCell.Offset(1, 0).Select Loop End Sub
您还可以使用更短版本的宏,前提是您可以使用拆分功能。 Excel 2000随附的VBA版本中引入了此功能,它将根据您指定的分隔符将字符串分开,并将零件填充到数组中。本示例显示了作为用户定义函数实现的解决方案。
Function GetFileName2(File_Path) As String Dim Parts Parts = Split(File_Path, Application.PathSeparator) GetFileName2 = Parts(UBound(Parts)) End Function
在这种用法中,Split函数将分隔符用于运行Excel的系统的任何分隔符。结果数组的最后一个元素(由UBound函数确定)包含原始路径中位于最后一个路径分隔符右侧的部分,即文件名。要使用该功能,请将这样的公式放在单元格中:
=GetFileName2(A1)
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(7333)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: