在VBA中分割文本和数字
我有我想split
column header
标题 XA 2009 WW YY 2010 XXA 2011
我想输出像
XA,WWYY,XXA
之前我在excel
使用find函数,工作正常
= MID(“XA 2009”,1,FIND(“”,“XA 2009”,FIND(“”,“XA 2009”)+ 1)-1)
输出为XA,WW YY
现在需求已经改变为vba中的代码
我试图使用Instr()而不是查找,因为它不是在VBA中工作
(1,“XA 2009”,“”,InStr(1,“XA 2009”,“2”)) – 1)
现在输出是XA,WW而不是WW YY。
任何人都可以提出我做错了什么。 我对vba很新。
我想输出像
XA,WWYY,XXA
我正在使用excel 2013
首先,请参阅以下SO问题的答案,在VBA中使用Regexsearch的一般方法和先决条件:
如何在Microsoft Excel中使用正则expression式(正则expression式)在单元格内和循环中
现在,针对您的具体要求,请尝试以下模式:
(\D*)\s+\d*\s+(\D*)\s+\d*\s+(\D*)\s+\d*
它会为你的精确的例子,但如果你需要inputstring是一个更普遍的一点,你可能需要修改模式。
一些解释:
\ D *将匹配一个或多个非数字文本字符(“字母字符”)
\ s +将匹配至less一个空格字符
\ d *将匹配一个或多个数字
(括号)是用于对结果集合进行分组的,所以我用它们来包围你想要从inputstring中提取的内容。
例如,如果您确实知道只能使用一个空格字符,您可以使用:
[\ s]的
所以模式可能如下所示:
(\D*)[\s]\d*[\s](\D*)[\s]\d*[\s](\D*)[\s]\d*
此外,这是在线模式testing的一个很好的工具:
这是您编辑的要求的解决scheme:
-
在VBA编辑器中,转到tools =>引用,find并选中“Microsoft VBScript Regular Expressions 5.5”旁边的checkbox,按ok
-
将此代码添加到“ThisWorkbook”模块:
Private Sub solution() Dim regEx As New RegExp Dim strPattern As String Dim myInput As Range Dim myOutput As Range Set myInput = ActiveSheet.Range("A1") Set myOutput = ActiveSheet.Range("A2") strPattern = "(\D*)[\s]\d*[\s](\D*)[\s]\d*[\s](\D*)[\s]\d*" strInput = myInput.Value With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regEx.test(strInput) Then ActiveSheet.Range("A2") = regEx.Replace(strInput, "$1, $2, $3") End If End Sub
你可能在一个特定的单元格中有这个公式,对吧? 我认为应该做以下事情:
Range("yourcell").FormulaR1C1 = "=MID("XA 2009",1,FIND(" ","XA 2009",FIND(" ","XA 2009")+1)-1)"
只要用你公式中的单元格号代替“你的单元格”。例如,如果你在单元格A1中有它,它应该是Range("A1")