如何在 Excel 中返​​回两个字符之间的所有内容?

如何在 Excel 中返​​回两个字符之间的所有内容?

我是一名精通多种语言的程序员,但不知为何我从未学过 Excel 宏或公式语言。我相信一定有一个简单的方法可以做到这一点,但我却不知所措。

我有一列文件名如下:

/home/www/shoppermarketexpo/dot/uploads/10DOT_33A_1275_1308304857_1.jpg
/home/www/shoppermarketexpo/dot/uploads/10DOT_15G_1184_1.jpg
/home/www/shoppermarketexpo/dot/uploads/10DOT_5A_1450_1.jpg
/home/www/shoppermarketexpo/dot/uploads/10DOT_18A_1341_1308325044_2.jpg

我需要做的是返回文件名,根据下划线将其分成几个部分。如果这需要多个步骤,我没问题 - 即公式 1 返回带有 的列10DOT_33A_1275_1308304857,然后公式 2 使用该结果返回带有 的第二列,10DOT_33A_1275依此类推。我希望有一个类似于 PHP 的explode 函数,您可以在其中获取字符串并根据分隔符(在本例中为下划线)返回数组。我猜这在公式中是不可能的;我可以使用 VBA,虽然我在 Mac 上,不知道它是否可用。

我知道 MID、LEFT 和 RIGHT,但它们都依赖于您知道要返回的字符数,而在本例中我不知道。每行都不同;唯一可行的标准是在下划线处将文件名拆分为多列。

这可能吗?

答案1

您可以使用数据菜单下的 Excel 文本到列功能。

这将需要几次传递,但您无需公式或 vba 即可完成。

您可以指定自己的分隔符。因此您可以选择.分隔扩展名,然后/分割目录结构。然后您可以选择_分割文件名。

文本分列向导

Nb 您可以设置不同的列以Text避免 Excel 将它们视为数字,或者设置其他列以便Do not import (skip)将其删除。

答案2

这是一个基于 VBA 的解决方案。请注意,像这样循环遍历单元格效率不高。如果你有很多行(比如说超过几万行),那么有更好的方法

选择要处理的范围并运行此

Sub SplitText()
    Dim rng As Range, rw As Range
    Dim cl As Range
    Dim i As Long, j As Long, k As Long
    Dim str As String

    If Not TypeName(Selection) = "Range" Then Exit Sub

    Set rng = Selection
    For Each rw In rng.Rows
        str = rw.Cells(1, 1)
        str = Mid(str, InStrRev(str, "/") + 1)
        str = Left(str, InStr(str, "."))
        j = InStr(str, "_")
        k = 2
        Do While j > 0
            rw.Cells(1, k) = Left(str, j - 1)
            str = Mid(str, j + 1)
            j = InStr(str, "_")
            k = k + 1
        Loop
        rw.Cells(1, k) = str
    Next
End Sub

答案3

这是一个基于公式的解决方案:

假设数据在 A 列,从第 2 行开始
,最多返回 5 个数据(可以进行调整以应对更多数据)
,并且字符串不包含 | 或 @(如果包含,请使用其他字符)

单元格 B2,获取文件名 =RIGHT(A2,LEN(A2)-FIND("|",SUBSTITUTE(A2,"/","|",LEN(A2)-LEN(SUBSTITUTE(A2,"/","")))))

单元格 C2,删除 .extension
=LEFT(B2,FIND(".",B2)-1)

单元格 D2:H2 作为数组公式,用 | 和 @ 括住连续项
=SUBSTITUTE(SUBSTITUTE("_"&C2&"_","_","|",{1,2,3,4,5}),"_","@",{1,2,3,4,5})

单元格 I2,然后将 I2 复制到 J2:L2:结果
=IFERROR(MID(D2,FIND("|",D2)+1,FIND("@",D2)-FIND("|",D2)-1),"")

答案4

VBA 中有一个 Split 函数可以帮助您制定计划,但没有 SPLIT 公式。

不过,我建议使用 Excel 公式。以下是几种情况:

  1. 如果每个文件的文件路径相同,只需将 RIGHT 与 LEN 和 FIND 一起使用,如下所示:

    =RIGHT(A1,LEN(A1)-FIND("上传/",A1)-LEN("上传/")+1)

    其中 A1 是包含文件路径的单元格。

  2. 如果所有文件的路径不相同,那么您必须使用其他方法。也许所有文件都是 .jpg (?) 或者除了文件扩展名之前没有句点。

相关内容