我在格式为Clare, South Australia 5453
的单元格中有一些文字。 Red Bluff, California 96080
订单为city
,state
和zip code
。
现在我想使用excel将这个文本分成三个部分,比如使用excel在不同单元格中的Clare
,South Australia
和5453
。
希望有人可以给我一个暗示。非常感谢。
答案 0 :(得分:1)
如果您需要一步完成,我建议您为此编写一个宏。 如果您可以分两步执行此操作,则可以使用“数据”选项卡中的“文本到列”功能和公式。
首先,您可以将文本拆分为逗号中的列,因此您可以将Clare和South Austria 5453分成两列。
然后你可以进入包含州和邮政编码的单元格,并使用公式来查找第一个数值:
=MIN(FIND({0,1,2,3,4,5,6,7,8,9},A1&"0123456789"))
(有关详细信息,请参阅:https://exceljet.net/formula/split-text-and-numbers)
这个解决方案当然不起作用。如果您想在没有帮助列的情况下进行拆分,我建议您编写一个简短的宏来执行此操作。
答案 1 :(得分:1)
您可以使用以下代码创建新的宏。您可以通过确保当前单元格(即ActiveCell)位于要转换的文本单元格之一来使用它。然后你执行宏,它应该将3个项目放在相邻的单元格中(我假设它是空的)。
宏使用正则表达式(由' strPattern'定义),它将接收逗号之前由空格分隔的多组字符。它将在逗号后执行相同操作,然后单独匹配邮政编码。
Public Sub simpleRegex()
Dim strPattern As String: strPattern = "^\s*((\w+\s*){1,}),\s*((\w+\s*){1,})\s+(\d+)"
Dim regEx As Object
Dim strInput As String
Dim matches As Object
Dim Myrange As Range
Set regEx = CreateObject("vbscript.regexp")
strInput = ActiveCell.Value
With regEx
.Global = True
.MultiLine = True
.IgnoreCase = True
.Pattern = strPattern
End With
If regEx.Test(strInput) Then
Set matches = regEx.Execute(strInput)
ActiveCell.Offset(0, 1).Value = matches(0).submatches(0)
ActiveCell.Offset(0, 2).Value = matches(0).submatches(2)
ActiveCell.Offset(0, 3).Value = matches(0).submatches(4)
Else
MsgBox ("Not matched")
End If
End Sub
这里需要注意的是,您可能需要使用它来处理您可能遇到的所有字符串变体。它确实适用于您提供的两个示例。