Vba Excel宏以取消堆叠数据

Vba Excel宏以取消堆叠数据,vba,excel,Vba,Excel,我有在接收数据之前已堆叠的数据。一个统一ID有多行值。我想通过添加列和拉入指定范围的数据,将这些多行转换为一行。因此,我的初始数据如下所示: 我的输出数据应该如下所示: 理想情况下,我希望从两个方面来查看宏-在本例中,它将一系列列拉入一起,例如B:C。但是,我还希望查看所需的列是否不是连续的B和E 谢谢你的帮助,非常感谢 这应该可以通过将数据解压到Sheet2来实现,这样Sheet1就不会被覆盖,这基本上是更安全的做法。它不在Sheet2中创建表,而只是写出数据 它由两个内部循环组成:一个循环

我有在接收数据之前已堆叠的数据。一个统一ID有多行值。我想通过添加列和拉入指定范围的数据,将这些多行转换为一行。因此,我的初始数据如下所示:

我的输出数据应该如下所示:

理想情况下,我希望从两个方面来查看宏-在本例中,它将一系列列拉入一起,例如B:C。但是,我还希望查看所需的列是否不是连续的B和E


谢谢你的帮助,非常感谢

这应该可以通过将数据解压到Sheet2来实现,这样Sheet1就不会被覆盖,这基本上是更安全的做法。它不在Sheet2中创建表,而只是写出数据

它由两个内部循环组成:一个循环使用相同的代码遍历行,另一个循环遍历其余的行。您必须确保单元格B1的标题值不等于第一个ID值-这不应该是一个问题,因为您的ID是数字,B1将始终是ID

Sub UnstackData()
  Dim wSht1 As Worksheet, wSht2 As Worksheet
  Set wSht1 = Sheets("Sheet1")
  Set wSht2 = Sheets("Sheet2")

  Dim r As Integer: r = 2
  Dim r2 As Integer: r2 = 1
  Dim r1 As Integer, c2 As Integer

  With wSht1
    wSht2.Rows(1).Value = .Rows(1).Value
    r1 = .Cells(.Rows.Count, "A").End(xlUp).Row

    Do While r <= r1
      c2 = 6

      Do While .Cells(r, "A") = .Cells(r - 1, "A")
        wSht2.Cells(r2, c2).Value = .Cells(r, "B").Value
        wSht2.Cells(r2, c2 + 1).Value = .Cells(r, "C").Value
        c2 = c2 + 2
        r = r + 1
      Loop
      r2 = r2 + 1

      Do While .Cells(r, "A") <> .Cells(r - 1, "A")
        wSht2.Range("A" & r2 & ":E" & r2).Value = .Range("A" & r & ":E" & r).Value
        r = r + 1
        r2 = r2 + 1
      Loop
      r2 = r2 - 1

    Loop

  End With

End Sub

Stack不是一个为我编写代码的服务,一般来说,您最好自己尝试编写代码,然后发布一个带有特定问题的问题。首先尝试用for循环迭代数据,如果您想通过id来索引属性,请非常感谢,这正是我所需要的。我能够根据我的真实数据集调整语法,它工作得非常好。非常感谢。