【问题标题】:Excel 2010: Move cells from vertical data to horizontal with VBAExcel 2010:使用 VBA 将单元格从垂直数据移动到水平数据
【发布时间】:2015-02-12 20:21:58
【问题描述】:

Excel 2010

我想将以下数据从垂直状态移动到水平数据。我想要一个 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 行的结果)
等等。

然后我复制并自动填充整张数据表,然后它全部填满。 我用这种方式构建新表。

当我进行宏记录时,它不会记录单元格中的实际公式。

【问题讨论】:

  • 大多数转置答案将两列解析为单行。我需要从枢轴(即 Order1)中取出它,然后只将结果移动到它们的新列中。正如我所指出的,我确实有一个公式可以做到这一点,但是我希望在 VBA 中使用它。我已经看了好几天了。
  • Excel 可以使用“复制”和“特殊粘贴...”来转置表格。这两个命令也应该在 VBA 中可用

标签: vba excel excel-2010


【解决方案1】:

如果我们开始:

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

中生成这个

编辑#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

【讨论】:

  • 我是个白痴 :)(筋疲力尽)我复制了错误的列数据 - 您的代码有效,但我需要输入 v = s1.Cells(i, 2).Value 而不是 1。你的答案很完美,谢谢。 :)
  • 谢谢。我计划将此与移动列的 VBA sn-p 配对,以便我可以将其滑入以匹配书中已有的其他数据。这为我节省了很多时间,谢谢。
  • 很抱歉,很痛苦。有没有办法在 A10 上启动该过程并将其粘贴到下一张纸上的 A10 上?我已经尝试在N = s1.Cells(Rows.Count, "A").End(xlUp).Row(以及相关的其他人)中使用 A10,但我不断收到调试错误。我的数据从第 10 行开始,它正在挑选我所有的标题:D
  • @MrsAdmin 查看我的EDIT#1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-16
  • 2013-08-09
  • 2020-02-25
  • 2021-09-30
相关资源
最近更新 更多