无法拆分多个特殊字符

时间:2015-11-03 10:32:35

标签: excel excel-vba vba

我正在尝试将单元格值分割为字符串中的最后一个“\” 单元格A1中的'C:\ Users \ punateng \ Desktop \ Pending Spec Updates.xlsx',因此单元格B1中的结果应为'C:\ Users \ punateng \ Desktop \'

我写了以下代码:

Sub mu()
Cells(1, 2).Value = Split(Cells(1, 1).Value, "\")
End Sub

但是我在C单元格中获得结果。

请帮忙。

2 个答案:

答案 0 :(得分:2)

Split返回一个字符串数组,在这种情况下,它将包含先前由\分隔的输入文本的每个部分 - 所以,您实际上是返回数组{{1} }。当您尝试将其粘贴到{"C:";"Users";"punateng";"Desktop";"Pending Spec Updates.xlsx"}时,VBA只会将其解释为字符串数组的第一个元素。

相反,您可能想尝试

Cells(1,2)

应该找到Cells(1,2).Value=Left(Cells(1,1).Value,InstrRev(Cells(1,1).Value,"\")-1)的最后一个实例并返回它之前的文本。

答案 1 :(得分:2)

这是一种功能优于子的情况。

Excel具有查找和搜索功能,但没有FindLast功能。

在用户定义函数(UDF)中,您可以使用Application.WorksheetFunction集合中不可用的某些函数。其中一个是InstrRev,它找到第一个字符串实例的位置,如" \"从字符串的末尾向后读。使用这个知识和文本编辑功能的小宝石,你可以构建这个UDF:

Function FileNameFromPath(Path1 As String)
    'Test if you have been parsed an network file path
    If InStr(1, Path1, "\") > 0 Then
        'Get whatever is after the last "\"
        FileNameFromPath = Right(Path1, Len(Path1) - InStrRev(Path1, "\"))
    Else
        'Could be a SharePoint file with http// address
        If InStr(1, Path1, "\") > 0 Then
            'Get whatever is after the last "/"
            FileNameFromPath = Right(Path1, Len(Path1) - InStrRev(Path1, "/"))
        Else
            'There isn't a path separator there
            FileNameFromPath = "That ain't a path"
        End If
    End If
End Function

因此,您可以在工作簿中的任何单元格中调用此UDF,方法是键入" = fi",按Tab键将其粘贴到您的单元格中,然后选择要测试的单元格并输入结束括号& #34;)"