比如单元格中有一列试卷的题目和选项,其中每道题的题目和选项在一个单元格中,形式如下:
序号+分隔符+题目内容+A+分隔符+A选项内容+B+分隔符+B选项内容+C+分隔符+C选项内容+D+分隔符+D选项内容
要将上述的内容按照 题目内容+A选项内容+B选项内容+C选项内容+D选项内容 的形式分别拆分到不同的单元格
可以使用如下的思路:
1.首先确定各个选项后面的分隔符是否统一,如果统一获取该分隔符。
2.用正则表达式将 选项+分隔符 替换为一个不可能存在于题目内容和选项内容中的字符。
3.用split函数拆分步骤2替换后的字符生成数组,然后依次填入具体的单元格中。
代码如下:
Sub QQ1722187970()
Dim oRegExp As Object
Set oRegExp = CreateObject("vbscript.regexp")
Dim oDic As Object
Set oDic = CreateObject("Scripting.Dictionary")
Dim oWK As Worksheet
Set oWK = Sheet1
Dim arr(0 To 10, 0 To 10)
With oRegExp
'设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
.Global = True
'设置是否区分大小写,True表示不区分大小写, False表示区分大小写
.IgnoreCase = True
With oWK
For i = 1 To 10
sText = .Cells(i, "a")
n = 0
With oRegExp
.Pattern = "[a-d|A-D]([^a-z|^A-Z])"
'判断是否可以找到匹配的字符,若可以则返回True
If .test(sText) Then
'对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
Set oMatches = .Execute(sText)
For Each oMatch In oMatches
'判断A\B\C\D选项后面的分隔符是什么字符
sResult = oMatch.SubMatches(0)
With oDic
If .exists(sResult) Then
.Item(sResult) = .Item(sResult) + 1
Else
.Add sResult, n
End If
End With
Next
arrKeys = oDic.keys
arrItems = oDic.items
'获取分隔符
sFGF = Excel.Application.WorksheetFunction.Index(arrKeys, Excel.Application.WorksheetFunction.Match(Excel.WorksheetFunction.Max(arrItems), arrItems, 0))
.Pattern = "[a-d|A-D]" & "\" & sFGF
sText = .Replace(sText, Chr(13))
arr = Split(sText, Chr(13))
With oWK
'题目
.Cells(i, "b") = arr(0)
'选项A
.Cells(i, "C") = arr(1)
'选项B
.Cells(i, "D") = arr(2)
'选项C
.Cells(i, "E") = arr(3)
'选项D
.Cells(i, "F") = arr(4)
End With
End If
End With
Next i
End With
End With
End Sub


发表评论