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

Emm*_*myS 6 vba worksheet-function microsoft-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
Run Code Online (Sandbox Code Playgroud)

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

我知道 MID、LEFT 和 RIGHT,但所有这些都取决于您知道要返回的字符数,在这种情况下我不知道。它因行而异;唯一有效的标准是在下划线处将文件名拆分为多列。

这可能吗?

chr*_*sen 6

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

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

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
Run Code Online (Sandbox Code Playgroud)


chr*_*sen 5

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

假设数据在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),"")


Chr*_*ent 4

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

这将需要多次传递,但您可以在没有公式或 VBA 的情况下完成。

您可以指定自己的分隔符。所以你可以选择.分离扩展名,然后/拆分出目录结构。然后您可以选择_拆分文件名。

文本分列向导

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