如何合并在Excel中水平拆分的垂直数据?

时间:2013-07-15 10:06:08

标签: excel excel-vba vba

我拥有的东西:我有很多小数据表(松散地说,不是“真正的”表)组织的数据一个接一个地放在两个< / strong>一个和下一个之间的列。这些“表格”全部由六个列和变量行数组成。表格从单元格A1开始。因此,例如,第一个表占据列A到F,第二个表占用N到N,依此类推。

我需要什么:我需要将所有这些表放在另一个之下,以创建可导出到统计软件的数据库,以便进一步分析。我需要的脚本应该取第二个表并剪切(或复制)并将其粘贴到第一个表格的下方,两者之间没有空白行。然后进入第三个并将其粘贴到第二个之下,依此类推。

我从未与VBA合作,但我需要一些东西来自动化这个过程,因为手工操作需要很多天。我用C ++和R编程,所以如果你能给我一些指导,我可以尝试将它放在一个VBA脚本中。

非常感谢。

1 个答案:

答案 0 :(得分:1)

我已经复制了你的表,所以它看起来像这个

reproduced table

然后我写了代码来完成这样的事情 end

我认为这就是你要找的东西,下面是代码

Sub Main()
    Dim ws As Worksheet

    Set ws = Sheets("Sheet1") ' rename sheet

    Dim i&, j&
    Dim curHead As String
    Dim nextHead As String
    For i = 1 To 3
        curHead = CStr(ws.Cells(1, i).Text)
        For j = 4 to ws.Cells(1, Columns.Count).End(xlToLeft).Column
            nextHead = CStr(ws.Cells(1, j).Value)
            If StrComp(curHead, nextHead, vbTextCompare) = 0 Then
                ws.Range(Cells(2, j), Cells(ws.Cells(Rows.Count, j).End(xlUp).Row, j)).Copy
                ws.Cells(ws.Cells(Rows.Count, i).End(xlUp).Row + 1, i).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
            End If
        Next j
    Next i
End Sub