希望有人能够为我正在做的事情提供更好的方法。不幸的是,数据和代码位于客户端系统上,因此我无法共享它们。
我有一个以前是数据表的长字符串,需要再次将值拆分为行和列。系统被严重锁定,所以我只能使用VBA。我能想到的最好方法是使用正则表达式来标识列和行。我已经设置了我的正则表达式对象并针对输入字符串执行,具有我需要的所有匹配,这很好。问题是,如果我做
re = CreateObject("VBScript.RegExp")
re.pattern = mypattern
re.split(myString)
据我所知,没有办法保留我分裂的价值观。在某些情况下,我想在正则表达式字符串的中间分割。
我认为最有希望的解决方案是
re = CreateObject("VBScript.RegExp")
re.pattern = mypattern
Set matches = re.execute(myString)
for each match in matches:
'do something with match.firstindex
我考虑过插入分隔符,然后使用split。不幸的是,VBA似乎没有方法将字符插入字符串中,使用firstindex看起来有点笨拙。
有没有人对更好的方法有任何想法?如果是这样,我们非常感激。
答案 0 :(得分:1)
您实际上可以在字符串中插入字符。取决于你对“笨重”的定义,但这是一个例子:
ActiveCell.Characters(5, 1).Insert (" | ")
这将从单元格的第五个字符开始“|”。您可能需要使用查找或通过单元格字符的某些循环来识别某些位置,但我认为这可能会让您继续前进。
使用STRING EDIT更新 这只是我的偏好,但编辑字符串似乎并不太笨重。您可以使用此设置来获得您想要的内容:
Sub StringSlicerSample()
Dim teststring As String, Separater As String, tangoTxt As String, BeforeTXT As String, AfterTxt As String, MidTxt As String
Dim Position_To_Slice As Integer
teststring = "xxxbangyyy"
Separater = " | " 'can be whatever you want as separator
tangoTxt = "bang" 'text to look for that you want use for split
Position_To_Slice = 1 'If you want to split somewhere in between, lets say after the "b"
'put =1 as that's the first position in "bang"
'Insert separator before
BeforeTXT = Mid(teststring, 1, InStr(1, teststring, tangoTxt) - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt), Len(teststring))
'Insert after
AfterTxt = Mid(teststring, 1, InStr(1, teststring, tangoTxt) + Len(tangoTxt) - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt) + Len(tangoTxt), Len(teststring))
'Split inbetween based on position to slice
MidTxt = Mid(teststring, 1, InStr(1, teststring, tangoTxt) + Position_To_Slice - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt) + Position_To_Slice, Len(teststring))
MsgBox BeforeTXT, Title:="Before Example"
MsgBox AfterTxt, Title:="After Example"
MsgBox MidTxt, Title:="Sliced in position " & Position_To_Slice
End Sub