2015-02-11 52 views
0

Excel 2010中Excel 2010中:将细胞垂直数据用VBA

我想从它的垂直状态水平要移动的数据下面的数据到水平位置。我希望在VBA中有一个解决方案。 (我已经有一个公式)。

令=(A10)结果=(B10)运行在1000行

| Order1   | result                  
| line1   | result 1 
| line2   | result 1 
| line3   | result 1 
| line4   | result 1 
| line5   | result 1 
| line6   | result 1 
| line7   | result 1 
| line8   | result 1 
|  br  |                   
| Order2   | result                 
| line1   | result 1 
| line2   | result 1 
| line3   | result 1 
| line4   | result 1 
| line5   | result 1 
| line6   | result 1 
| line7   | result 1 
| line8   | result 1 

我希望它作为解决:事先

Order 1 | result1 | result2 | result3 | result4 | result5 | result6 | result7 | result8 | 
Order 2 | result1 | result2 | result3 | result4 | result5 | result6 | result7 | result8 | 

感谢

编辑
我目前的公式是这样的: (C10)=IF(A3="Order1 ",1,0)(结果:1)
(D10)=IF($C3=1,B3,0)(结果:结果从第1行)
(E10)=IF($C3=1,B10,0)(结果:结果从第2行)
等。

然后我复制并自动填充整张数据,并将其全部填充。 然后我用这种方法构建新表格。

当我宏记录它不记录我在单元格中的实际公式。

+0

大部分的转置答案解析两列单线条。我需要从枢轴(即Order1)中取出它,然后将结果移动到新列。正如我指出的那样,我确实有一个公式,但是我希望在VBA中可以这样做。我一直在寻找这个好几天。 – MrsAdmin 2015-02-11 16:03:42

+0

Excel可以使用“复制”和“粘贴特殊...”来转置表格。这两个命令也应该在VBA中可用 – cello 2015-02-11 16:03:58

回答

2

如果我们开始:在

enter image description here

与订单之间的空白工作表Sheet1,那么这个宏:

Sub reorg() 
    Dim s1 As Worksheet, s2 As Worksheet, N As Long, i As Long, j As Long, k As Long 
    Dim v As Variant 
    Set s1 = Sheets("Sheet1") 
    Set s2 = Sheets("Sheet2") 
    N = s1.Cells(Rows.Count, "A").End(xlUp).Row 
    j = 1 
    k = 1 

    For i = 1 To N 
     v = s1.Cells(i, 1).Value 
     If v = "" Then 
      j = j + 1 
      k = 1 
     Else 
      s2.Cells(j, k) = v 
      k = k + 1 
     End If 
    Next i 
End Sub 

将Sheet2中

产生这种enter image description here

编辑#1:

要使用A10作为起点和目标上,使用:

Sub reorg() 
    Dim s1 As Worksheet, s2 As Worksheet, N As Long, i As Long, j As Long, k As Long 
    Dim v As Variant 
    Set s1 = Sheets("Sheet1") 
    Set s2 = Sheets("Sheet2") 
    N = s1.Cells(Rows.Count, "A").End(xlUp).Row 
    j = 10 
    k = 1 

    For i = 10 To N 
     v = s1.Cells(i, 1).Value 
     If v = "" Then 
      j = j + 1 
      k = 1 
     Else 
      s2.Cells(j, k) = v 
      k = k + 1 
     End If 
    Next i 
End Sub 
+0

我是个笨蛋:)(精疲力尽)我复制了错误的列数据 - 你的代码工作了,但我需要放入'v = s1.Cells(i,2)。值不是'1'。你的回答很完美,谢谢。 :) – MrsAdmin 2015-02-11 16:25:02

+1

不错的工作调试! – 2015-02-11 16:26:37

+0

谢谢。我计划将这个与VBA片段配对,这个片段可以移动列,以便我可以将它滑入以匹配书中已有的其他数据。这节省了我很多时间,谢谢。 – MrsAdmin 2015-02-11 16:29:26