2014-10-08 160 views
-2

在Excel中,如何将一行分成一组列。 A1:G1中的数据应该在第一行,那么A1:C1将与第一行相同,D1:G1应该从第一行的末尾开始。这应该继续,直到第一行中的数据被限制为G1 。如何在Excel中为每三列分割一行?

我的数据是一样

A  B  C    D   E ...  AE   AF   AG    
1  ab 2013/01/12  2013/02/23 233  2013/02/24 2013/03/11  500 
2  cd 2013/01/12  2013/02/23 233  2013/02/24 2013/03/11  343 
. 
. 
200 XX  XXXX/XX/XX  XXXX/XX/XX XX  XXXX/XX/XX XXXX/XX/XX  XXX 

我需要这个拆分成:

A    B    C    D   E   
1    ab   2013/01/12  2013/02/23 233 
. 
. 
1    ab   2013/02/24  2013/03/11 500 


2    cd   2013/01/12  2013/02/23 233 
. 
. 
2    cd   2013/02/24  2013/03/11 343 
. 
. 

如何在Excel做,我试着写一个VB脚本,但它没去任何地方。有人可以帮助我这个。

+0

'500'和'343'从哪里来? – pnuts 2014-10-08 19:32:51

+0

这是主行中的数据,主行不以G结尾,它继续。我想把所有的数据分成几列 – 2014-10-08 19:53:39

+0

没有明确我的要求 - 但也许别人会解决这个问题。 – pnuts 2014-10-08 19:59:14

回答

0

好的,所以看起来你有两个单元格带有静态ID和名称,然后一系列三个单元格显示Date,Date,Number的模式。你想把前两个单元格右边的所有内容都放到重复行中。这应该做的。

Sub split_and_stack() 
    Dim c As Long, r As Long, lc As Long, lr As Long 
    Dim ws1 As Worksheet, ws2 As Worksheet 
    Set ws1 = ActiveSheet 
    Sheets.Add after:=Sheets(Sheets.Count) 
    Set ws2 = Sheets(Sheets.Count) 
    ws2.Cells(1, 1).Resize(1, 5) = Array("id", "name", "start", "end", "number") 
    With ws1 
     lr = .Cells(Rows.Count, 1).End(xlUp).Row 
     lc = .Cells(1, Columns.Count).End(xlToLeft).Column 
     For r = 1 To lr 
      For c = 3 To lc Step 3 
       ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(1, 2) = _ 
        .Cells(r, 1).Resize(1, 2).Value 
       ws2.Cells(Rows.Count, 1).End(xlUp).Offset(0, 2).Resize(1, 3) = _ 
        .Cells(r, c).Resize(1, 3).Value 
      Next c 
     Next r 
    End With 
End Sub 

以下图片可能不会正确显示日期,但您应该了解一般想法。在提供样本数据时,不要提供模糊的日期,这种日期可以转录为mm/dd/yydd/mm/yy

enter image description here

+0

完美,这就是我一直在寻找的!谢谢!! – 2014-10-09 05:56:19