Excel:如何从文本中删除多个文件路径

Excel:如何从文本中删除多个文件路径

我在电子表格中拥有 2000 多行来引用项目图像,并且我需要删除文件路径,但是某些字段在一个单元格中有多个图像引用,因此对于一个复杂的例子:

/2/0/2099-1.jpg,/2/0/2099-2.jpg,/2/0/2099-3.jpg,/m/a/male_headless_mannequin_-_arms_folded.jpg

需要看起来像这样:

2099-1.jpg,2099-2.jpg,2099-3.jpg,男性无头模特手臂折叠.jpg

但只有一个图像 reff,例如:

/3/1/31-222-007.jpg,

公式:

> =MID(AA2,FIND("*",SUBSTITUTE(AA2,"/","*",LEN(AA2)-LEN(SUBSTITUTE(AA2,"/",""))))+1,LEN(AA2))

当只有一个 jpg 时效果很好,但如果有多个,我就卡住了。

谢谢

答案1

使用中的数据A1,尝试:

=CONCAT(FILTERXML("<t><s>"&SUBSTITUTE(A1,"/","</s><s>")&"</s></t>","//s[substring(., string-length(.) - 3) = '.jpg' or substring(., string-length(.) - 4) = '.jpg,']"))

如果您运行 Excel 2019,则需要对此公式进行 CSE。如果您有 Excel O365,则不需要 CSE,但也有一个更短的版本,使用LET()

=LET(X,FILTERXML("<t><s>"&SUBSTITUTE(A1,"/","</s><s>")&"</s></t>","//s"),CONCAT(IF(ISNUMBER(FIND(".jpg",X)),X,"")))

在此处输入图片描述


对于那些有兴趣的人来说,关联针对我下面评论中提到的问答。

答案2

尝试一下这个小型的用户定义函数:

Option Explicit

Public Function NoPath(sIn As String) As String
    Dim arr, i As Long, v As String, L As Long
    Dim j As Long
    
    arr = Split(sIn, ",")
    For i = LBound(arr) To UBound(arr)
        v = arr(i)
        L = Len(v)
        For j = L To 1 Step -1
            If Mid(v, j, 1) = "/" Then
                arr(i) = Mid(v, j + 1)
                Exit For
            End If
            Next j
        Next i
        NoPath = Join(arr, ",")
        
End Function

在此处输入图片描述

用户定义函数 (UDF) 非常容易安装并使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

消除UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

使用Excel 中的 UDF:

=NoPath(A1)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

相关内容