选择“每第N行”和“移动到列”

时间:2012-01-20 09:48:05

标签: excel vba excel-vba excel-2007

我一直在搜索并找到了一些可能的答案,但由于不熟悉Excel宏,我不确定如何根据我的直接需要调整任何可能的解决方案。

因此,我目前有一个Excel数据集,其中包含以下示例中的10,000条记录:

Name
Street
City, State Zip
Name
Street
City, State Zip
etc

我希望能够将street的所有行移动到他们自己的列中,并将city, state zip移动到自己的列中。

因此电子表格如下:

Name     Street    City, State    Zip
Name     Street    City, State    Zip
Name     Street    City, State    Zip

1 个答案:

答案 0 :(得分:3)

这里有一个简单的Sub来重塑您的数据,并使用som注释来解释每一步。

它没有数据完整性检查或错误处理,您应该添加它以制作强大的解决方案

Sub ReshapeData()
    Dim rng As Range
    Dim Src As Variant, Dst As Variant
    Dim i As Long

    ' Get Data From Sheet
    ' Assumes data starts at A1 on active sheet and has no gaps
    Set rng = Range([A1], [A1].End(xlDown))
    ' Copy data to a variant array
    Src = rng
    ' Set size of another array to match result
    ReDim Dst(1 To UBound(Src) / 3, 1 To 3)
    '  Loop through source array, copy data to desination array
    For i = 0 To UBound(Dst) - 1
        Dst(i + 1, 1) = Src(i * 3 + 1, 1)
        Dst(i + 1, 2) = Src(i * 3 + 2, 1)
        Dst(i + 1, 3) = Src(i * 3 + 3, 1)
    Next
    ' Delete original data
    rng.ClearContents
    ' Put new data on sheet
    rng.Resize(UBound(Dst), 3) = Dst
End Sub