通过指定子string的第一个和最后一个string来提取string中的子string

我想知道是否有一种方法可以通过指定开始的几个字符和结束字符来提取子string的string。

作为一个例子,我在工作簿的单元格中的问题的底部有string,每个单元格都有一个类似的大string。 我想提取所有的名字到一个数组中。

“c1-mc-”将始终是名称的前缀。 我希望我可以使用一个函数,我可以指定每个以“c1-mc”开始并以vbLf(enter)结尾的子string,提取这些string。 我认为Instr()和Split()可以帮助但不知道如何继续。

"Str: 1/2/1 End : 1/2/2 Name: cl-mc-23223322 Name: c1-mc-dddssda Info: alot of detail Name: c1-asa-dddssda task: asdf Name: c1-mc-xd132eds" <the code which works> For Each rng1 In table1.DataBodyRange.Columns(8).Cells MyString = rng1.Value Do Until InStr(MyString, "c1-mc") = 0 namestart = InStr(MyString, "c1-mc") name = Mid(MyString, namestart) nameend = InStr(name, vbLf) - 1 name = Left(name, nameend) 'this gives you a name namestart = InStr(name, "c1-mc") name = Mid(name, namestart) nameend = InStr(name, " ") - 1 If (nameend = -1) Then nameend = Len(name) End If name = Left(name, nameend) ' gives you name incase there are no next lines MyString = Replace(MyString, name, "") 'this cuts the original string so it now starts where the name ended. MsgBox name i = i + 1 Loop Next 

重新阅读你的问题后编辑我想我没有正确回答。 请详细说明每个单元格中实际包含的内容以及我们正在讨论的单元格数量(1?)。

一个string是一串字符。 在几行写你的string并不意味着它实际上改变。 正如你所说的,当你inputchr(10)或者vbLF时,行会发生变化。 我不确定你发布的string中哪一部分想要提取。 假设你想取一个单元格的名字,并且string保存在stringvariables[mystring]中:

 Dim name as string Dim namestart as integer Dim nameend as integer namestart = Instr(Mystring, "c1-mc-" ) name = Mid(Mystring, namestart + 1) nameend = Instr(Mystring, vbLF) name = Left(name, nameend) 

现在名称将包含您的string的名称。 testing(我没有,你可能需要调整一些小的东西),当你有它的时候,使用for循环来循环你的单元格,并将名称添加到你想要的数组。

编辑2:因为你想提取您的单元格中的名称的所有实例,我会将其更改为:

 Dim name as string Dim namestart as integer Dim nameend as integer Dim namearray() as string Dim i as integer Do Until Instr(Mystring, "c1-mc-" ) = 0 'will continue filling the array until Mystrign no longer has any names) namestart = Instr(Mystring, "c1-mc-" ) name = Mid(Mystring, namestart + 1) nameend = Instr(Mystring, vbLF) name = Left(name, nameend) 'this gives you a name Mystring = Mid(Mystring, Instr(Mystring, name) ) 'this cuts the original string so it now starts where the name ended. namearray(i) = name i = i + 1 Loop