使用正则expression式将列中单元格的内容拆分

这是我到现在为止的代码,它实际上删除了一个单元格中的所有内容,但数字。 这看起来像这样:

Sub myTest() Dim myCel As Range Dim i As Integer i = 0 'copier le contenu de la colonne A dans la colonne B Columns("A:A").Select Selection.Copy Columns("B:B").Select ActiveSheet.Paste 'on supprime tout ce qui n'est pas un nombre With CreateObject("VBScript.Regexp") .Global = True .Pattern = "\D+" For Each myCel In Range("B1:B900") myCel.Value = .Replace(myCel.Value, "") Next End With End Sub 

它工作正常…现在,我想要做的是实际上是将细胞内容分成3个单元格:一个是数字之前的所有内容,一个是数字,另一个是数字之后的内容。 我有这样的专栏:

 <g0 t="bold"> </g0> <g1> </g1> <g2> </g2> <g3> </g3> <g4> </g4> <i5 t="lb"/> <i6 t="lb"/> <g7> </g7> <g8> </g8> <i9 t="lb"/> <i10 t="lb"/> <i11 t="lb"/> 

我想得到这样的东西:(在NP + +正则expression式将是(<。 ?)([0-9] {1,3})(。 >),然后replace为\ 1 \ t \ 2 \ t 3.在VBA中,这个问题比较复杂,我想在这个问题上寻求帮助……希望有人会有一个想法:)

 <g 0 t="bold"> </g 0 > <g 1 > </g 1 > <g 2 > </g 2 > <g 3 > </g 3 > <g 4 > </g 4 > <i 5 t="lb"/> <i 6 t="lb"/> <g 7 > </g 7 > <g 8 > </g 8 > <i 9 t="lb"/> <i 10 t="lb"/> <i 11 t="lb"/> 

现在我的问题是没有太多关于正则expression式本身(我相当正确的正则expression式)比VBA代码,让我真正拆分单元格,并发送3个部分到3个不同的单元格在一个循环中…

你是非常接近的正则expression式,我不得不做一个小的修改。

首先,请确保你的VBA模块中增加了对“Microsoft VBScript Regular Expressions 5.5”的引用(请参阅此链接了解如何操作)。

 Private Sub TestRegex() Dim regEx As New RegExp Dim strPattern As String Dim strInput As String Dim strRaplace As String Dim strOutput As String Dim Myrange As Range Set Myrange = ActiveSheet.Range("B1:B19") For Each C In Myrange strPattern = "(\<.?.?)([0-9]{1,3})(.*>)" If strPattern <> "" Then strInput = C.Value strReplace = "$1" With regEx .Global = True .MultiLine = True .IgnoreCase = False .Pattern = strPattern End With If regEx.Test(strInput) Then C.Offset(0, 1) = regEx.Replace(strInput, "$1") C.Offset(0, 2) = regEx.Replace(strInput, "$2") C.Offset(0, 3) = regEx.Replace(strInput, "$3") Else C.Offset(0, 1) = "(Not matched)" End If End If Next End Sub 

我的input在B列,输出显示在C,D&E

在这里输入图像说明

没有正则expression式,select你的单元格和:

 Sub parser101() Dim r As Range, v As String, L As Long Dim I As Long, N1 As Long, N2 As Long N1 = 0 N2 = 0 For Each r In Selection v = r.Text L = Len(v) For I = 1 To L If IsNumeric(Mid(v, I, 1)) Then N1 = I GoTo escape101 End If Next I ' escape101: ' For I = N1 To L If Not IsNumeric(Mid(v, I, 1)) Then N2 = I GoTo escape102 End If Next I ' escape102: ' r.Offset(0, 1) = Mid(v, 1, N1 - 1) r.Offset(0, 2) = Mid(v, N1, N2 - N1) r.Offset(0, 3) = Mid(v, N2) Next r End Sub