如何在Excel中将一列分成三列?

我如何将第一张照片(整个地址)分成第二张照片(地址,城市,州,邮政编码)。 我有超过一千个数据,所以好心的build议我简单的方法?

所有的整个地址格式化为729鹌鹑驱动器,frisco TX 75034

我需要拆分地址为729鹌鹑溪驱动器 ,市作为弗里斯科 ,状态为TX和邮编75034

整个地址

拆分地址,城市,州,邮政编码 谢谢

如果您知道您的数据将始终是这种格式:

 <address>, <city> <2-letter state> <5-digit zip code> 

那么这是我能想到的最简单的方法:

公式<address>

 = LEFT(A1,FIND(",",A1)-1) 

<city>公式:

 = MID(A1,FIND(",",A1)+2,LEN(A1)-FIND(",",A1)-10) 

<2-letter state>公式<2-letter state>

 = MID(A1,LEN(A1)-7,2) 

<5-digit zip code>公式:

 = RIGHT(A1,5) 

看下面的例子。

在这里输入图像说明

这可以用RegExp来完成,而不是找出RegExp模式,我已经使用了Split函数和一些数组。 我认为地址在逗号前面。

 Sub SplitAddress() Dim Addresses As Variant, results As Variant, tmp As Variant Dim i As Long, j As Long ' Update for you range With Sheet1 'Trick to get 1D array from range Addresses = Application.Transpose(.Range(.Cells(2, "A"), .Cells(.Cells(.Rows.Count, "A").End(xlUp).Row, "A"))) End With ReDim results(1 To UBound(Addresses), 1 To 4) For i = 1 To UBound(results, 1) tmp = Split(Addresses(i), ",") results(i, 1) = Trim(tmp(0)) tmp = Split(Trim(tmp(1)), " ") For j = LBound(tmp) To UBound(tmp) results(i, j + 2) = Trim(tmp(j)) Next j Next i ' Update for your destination With Sheet1.Cells(2, "B") Range(.Offset(0, 0), .Offset(UBound(results, 1) - 1, UBound(results, 2) - 1)).Value2 = results End With End Sub 

用RegExp更新

此方法使用RegExp分割您的string

 Sub splitAddressRegEx() Dim ReGex As Object Dim Addresses As Range Dim j As Long Dim c, m ' Update for your range With Sheet1 Set Addresses = .Range(.Cells(2, "A"), .Cells(.Cells(.Rows.Count, "A").End(xlUp).Row, "A")) End With Set ReGex = CreateObject("VBScript.RegExp") With ReGex .Global = True .IgnoreCase = True .Pattern = "(.+?(?=,))|(\w+)" End With For Each c In Addresses j = 1 If ReGex.Test(c.Value2) Then For Each m In ReGex.Execute(c.Value2) ' Update for your output c.Offset(0, j).Value2 = m j = j + 1 Next m End If Next c End Sub