我想要column header
split
标题 XA 2009 WW YY 2010 XXA 2011
我希望输出
XA, WW YY, XXA
之前我在excel
中使用了查找功能,该功能运行良好
= MID(" XA 2009",1,发现(""," XA 2009",发现("&# 34;," XA 2009")+ 1)-1)
OUTPUT AS XA, WW YY
现在要求已更改为vba中的代码
我试图使用Instr()而不是find,因为它在VBA中不起作用
Mid(" XA 2009",1,InStr(1," XA 2009","",InStr(1,&#34) ; XA 2009"," 2")) - 1)
现在输出是XA, WW而不是WW YY。
任何人都可以建议我做错了什么。我对vba很新。
我希望输出
XA, WW YY, XXA
我正在使用excel 2013
答案 0 :(得分:1)
首先,请参阅以下SO问题的答案,在VBA中使用Regex搜索的一般方法和先决条件:
How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops
现在,根据您的具体要求,尝试以下模式:
(\D*)\s+\d*\s+(\D*)\s+\d*\s+(\D*)\s+\d*
它适用于您的精确示例,但如果您需要输入字符串更一般,则可能需要修改模式。
一些解释:
\ D *将匹配一个或多个非数字文本字符("字母字符")
\ s +将匹配至少一个空格字符
\ d *将匹配一个或多个数字
(括号)用于分组结果集,所以我用它们来包围你想从输入字符串中提取的内容。
例如,如果您确定只能使用一个空格字符:
[\ s]的
因此模式可能如下所示:
(\D*)[\s]\d*[\s](\D*)[\s]\d*[\s](\D*)[\s]\d*
此外,这是一个很好的在线模式测试工具:
这是您编辑的要求的解决方案:
在VBA编辑器中,转到tools =>引用,找到并选中" Microsoft VBScript正则表达式5.5"旁边的复选框,按确定
将此代码添加到" 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
答案 1 :(得分:0)
你可能在特定的细胞中有这个公式,对吧?我认为以下应该做:
Range("yourcell").FormulaR1C1 = "=MID("XA 2009",1,FIND(" ","XA 2009",FIND(" ","XA 2009")+1)-1)"
只需将“yourcell”替换为您具有公式的单元格编号。例如,如果您在单元格A1中使用它,则应为Range("A1")