2015-04-24 64 views
0

我有如下表拆分分隔的第二和第三列数据到新行

ID.  ID2.    String 
    123.  567, 986   ABC;BCD;ACD 
    142.  134, 654,1134  AA;BB 

我希望它在ID栏中显示

ID ID2 String 
123 567 ABC 
123 986 BCD 
123  ACD 
142 134 AA 
142 654 bb 
142 1134 

的值是唯一的。

有没有一个有效的宏解决方案呢?我有一组非常庞大的数据。

+2

您的问题的答案是肯定的,特别是如果分隔符是固定的。现在对于我的问题,你有什么尝试?在你的尝试中,你遇到了什么问题? – L42

回答

0

在只有起始,在有源板和ID是在A1的连接数据,运行此宏。

Sub split_out() 
    Dim v As Long, vVALs As Variant, vID2s As Variant, vSTRs As Variant 
    Dim rw As Long, lr As Long, mx As Long 

    With ActiveSheet 
     lr = .Cells(Rows.Count, 1).End(xlUp).Row 
     .Cells(1, 1).CurrentRegion.Rows(1).Copy Destination:=.Cells(lr + 2, 1) 
     For rw = 2 To lr 
      vVALs = Application.Index(.Cells(rw, 1).Resize(1, 3).Value, 1, 0) 
      vID2s = Split(vVALs(2), Chr(44)) 
      vSTRs = Split(vVALs(3), Chr(59)) 
      mx = Application.Max(UBound(vID2s), UBound(vSTRs)) 
      For v = LBound(vID2s) To mx 
       .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = vVALs(1) 
       If UBound(vID2s) >= v Then _ 
        .Cells(Rows.Count, 1).End(xlUp).Offset(0, 1) = vID2s(v) 
       If UBound(vSTRs) >= v Then _ 
        .Cells(Rows.Count, 1).End(xlUp).Offset(0, 2) = vSTRs(v) 
      Next v 
     Next rw 
    End With 

End Sub 

展平数据将填充到现有数据的下方。你的结果应该类似于以下内容。

Flatten data with arrays

2

试试这个。

Sub FlattenData() 
    Dim rng As Range, arr() As Variant, i As Long, rw As Long, j As Long 

    Set rng = Range("A1:C2") //Update for your range 
    arr() = rng 

    rng.ClearContents 

      rw = 0 

    For i = 1 To UBound(arr, 1) 
     colBTemp = VBA.Split(arr(i, 2), ",") 
     colCTemp = VBA.Split(arr(i, 3), ";") 

     colBTempLength = UBound(colBTemp, 1) + 1 
     colCTempLength = UBound(colCTemp, 1) + 1 
     requiredRows = WorksheetFunction.Max(colBTempLength, colCTempLength) 

     For j = 1 To requiredRows 
      Range("A" & rw + j) = arr(i, 1) 

      If j <= colBTempLength Then 
       Range("B" & rw + j) = colBTemp(j - 1) 
      Else 
       Range("B" & rw + j) = vbNullString 
      End If 

      If j <= colCTempLength Then 
       Range("C" & rw + j) = colCTemp(j - 1) 
      Else 
       Range("C" & rw + j) = vbNullString 
      End If 
     Next j 

     rw = rw + requiredRows 
    Next i 
End Sub 
+0

它清除所有内容,不会给我想要的东西 – masuka

+0

除了清除内容之外,还有什么东西会打印到Excel表格中?我测试了它,似乎为我工作... –

+0

@AlexP - 我认为你的'rng.ClearContents'应该移动到'arr()= rng'代码行的下面。 – Jeeped

相关问题