如何定位和删除单元格外的多个部分

使用VBA或A标准公式,我需要从单元格编辑以下内容。

我需要删除一切,包括“path:”,然后我需要它来查找| 并重新开始,直到到达单元格的末尾

例如:分类名称:女士,分类path:女士|分类名称:销售,分类path:销售|分类名称:新build,分类path:新|

目标:女士|销售|新

它可以包括没有“|” 或者可以包含多达20个“|”

编辑:意识到我需要在巡回演出之后展示我的作品。 🙂

我已经花了一两天的时间,到目前为止,这只是我可以拿出来… … –

Dim s As String s = Range("Z7").Value Dim indexOfPath As Integer Dim indexOfPipe As Integer Dim indexOfCat As Integer indexOfPath = InStr(1, s, "Path:") indexOfPipe = InStr(1, s, "|") Dim finalString As String Dim pipeString As String finalString = Right(s, Len(s) - indexOfPath - 5) indexOfCat = InStr(1, finalString, "Path:") pipeString = Right(finalString, Len(finalString) - indexOfCat - 5) Range("A47").Value = finalString Range("A48").Value = pipeString 

我怎样才能达到我自己不迷惑的地步…

试试这个function:

 Function splitonbar(rng As Range) As String Dim tempArr() As String Dim temp As String Dim i As Integer tempArr = Split(rng.Value, "|") For i = LBound(tempArr) To UBound(tempArr) If Len(tempArr(i)) > 0 Then temp = temp & "|" & Trim(Mid(tempArr(i), InStr(tempArr(i), "Path:") + 5)) End If Next i splitonbar = Mid(temp, 2) End Function 

它可以在表单上用作公式,或者从另一个子表单中调用。 要在工作簿中使用UDF作为模块,只需使用公式调用它即可:

 =splitonbar(Z7) 

或者你可以用这样的子对象来调用它:

 Sub splitstring() Dim t as string t = splitonbar(range("Z7")) debug.print t end sub 

将单元格值拆分为“|”,然后将结果数组中的每个值拆分到“path:”中,并从结果中获取第二个元素。

喜欢这个:

 Sub Tester() Dim s As String, arr, v, arr2 s = "Category Name: Ladies, Category Path: Ladies|Category Name:" & _ " Sale, Category Path: Sale|Category Name: New, Category Path: New|" arr = Split(s, "|") For Each v In arr v = Trim(v) If Len(v) > 0 Then arr2 = Split(v, "Path:") If UBound(arr2) > 0 Then Debug.Print arr2(1) End If Next v End Sub 

直接适合您的需求:

 Public Function test(ByVal arg As Variant) As String Dim i As Long arg = Split(arg, "Category Name: ") For i = 1 To UBound(arg) arg(i) = Left(arg(i), InStr(arg(i), ",") - 1) Next test = Mid(Join(arg, "|"), 2) End Function 

Split本身削减关键字前的所有内容。 Left剪切逗号后面的所有内容(包括逗号本身)

如果你还有剩余的问题,就问:)