如何在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