单细胞中的数据分成多行

我有以下格式的Excel文件中的名称和地址的数据集。

Name1 134/47/1, adrs1, adr2, country Name2 adrs1, adrs2, country Name3 107/c, adrs3, adrs3, country etc… 

我想要按照以下格式将这些数据分成多行

 Name1 134/47/1, adrs1, adrs2, country Name2 No 134/63, adrs1, adrs2, country etc… 

我试过,但它只适用于一行单元格。

 Sub tst() Dim X As Variant X = Split(Range("A1").Value, ",") Range("A1").Resize(UBound(X) - LBound(X) + 1).Value = Application.Transpose(X) End Sub 

下面的macros可能会帮助你。 您将不得不select包含多部分地址的表格中最后一个单元格。 当你启动这个macros时,它将会到达顶端,并在需要的地方插入地址行(只在当前列中),然后退出。

 Option Base 1 Sub trnsfrm() Dim i%, n%, ret(3, 1) Set r = Selection Do a = Split(r, ",") ret(1, 1) = Trim(a(0)) ret(2, 1) = Trim(a(1)) ret(3, 1) = Trim(a(2)) r.Range([a2], [a3]).Insert Shift:=xlDown r.Range([a1], [a3]) = ret If r.Row <= 4 Then Exit Do Set r = r.Offset(-4) Loop End Sub 

如果要在整个表格中插入行,则应将行(10)

 r.Range([a2], [a3]).Insert Shift:=xlDown 

通过

 r.Range([a2], [a3]).EntireRow.Insert Shift:=xlDown 

假设/警告

由于macros实际上会改变你当前的表,'撤消'不能用macros,你应该在尝试之前保存所有东西。

该macros假定每个地址块 正好4行组成 。 如果一个地址的行数越来越less,那么maro就会失去同步,并且很可能会输出垃圾或停止。

我不确定您的样本数据是否有单个值的逗号作为拼写错误,或者如果这是您的数据的准确表示,但应该考虑到这一点。 stream氓逗号作为后缀将为variables数组创build一个额外的元素,从而抛出通过引用UBound函数创build的维度。

 Sub split_from_below_space() Dim rw As Long, v As Long, vVALs As Variant With Worksheets("Sheet1") 'set this worksheet reference properly! For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 .Cells(rw, 1) = Trim(.Cells(rw, 1).Value2) If CBool(InStr(1, .Cells(rw, 1).Value2, Chr(44) & Chr(32))) Then vVALs = Split(.Cells(rw, 1).Value2, Chr(44) & Chr(32)) .Cells(rw + 1, 1).Resize(UBound(vVALs), 1).EntireRow.Insert .Cells(rw, 1).Resize(UBound(vVALs) + 1, 1) = _ Application.Transpose(vVALs) For v = UBound(vVALs) - 1 To LBound(vVALs) Step -1 .Cells(rw, 1).Offset(v, 0) = _ Trim(.Cells(rw, 1).Offset(v, 0).Value2) & Chr(44) Next v End If Next rw End With End Sub 

您将需要插入行以适应数据,并且该方法几乎总是(如在这种情况下)从底部到顶部进行更好地执行。