将一行拆分为多个的VBA返回额外数据

时间:2017-09-18 18:44:44

标签: excel vba

我是VBA的新手需要一些关于代码的帮助。

我有一个包含数千行的大型电子表格,每行有一个unique_ID,问题答案为7到65。我需要按id拆分这些行,这样每行都有ID,问题编号和数字值(问题答案)。

原始数据如下所示:

Data example

我找到了一个帮助我在此页面上拆分行的VBA代码: Split a row into several, with an identifier

这是我正在使用的代码:

Sub NewLayout()
For i = 2 To Cells.Find("*", [A1], , , xlByRows, xlPrevious).Row
    For j = 0 To Cells.Find("*", [A1], , , xlByColumns, xlPrevious).Column
        If Cells(i, 13 + j) <> vbNullString Then
            intCount = intCount + 1
            Cells(i, 1).Copy Destination:=Cells(intCount, 30)
            Cells(i, 2 + j).Copy Destination:=Cells(intCount, 31)
            Cells(i, 13 + j).Copy Destination:=Cells(intCount, 32)
        End If
    Next j
Next i
End Sub

代码似乎有效,但我的输出有问题:它返回一些额外的数据,我不知道代码中的错误在哪里以及如何摆脱它。

附上输出示例。

Output example

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

试一试,

Sub NewLayout()
    with worksheets("sheet1")
        For i = 2 To .Cells(.rows.count, "A").end(xlup).Row
            For j = 0 To .Cells(i, 29).end(xltoleft).Column
                .cells(.rows.count, "AD").end(xlup).offset(1,0) = .cells(i, "A").value
                .cells(.rows.count, "AD").end(xlup).offset(0,1) = .cells(1, j).value
                .cells(.rows.count, "AD").end(xlup).offset(1,0) = .cells(i, j).value
            Next j
        Next i
    end with
End Sub

您在嵌套For ... Next中重新评估终止j,同时您将值写入AD:AF列。您可以考虑写入另一个工作表或低于现有数据而不是右侧。