在Excel

时间:2017-07-24 19:23:51

标签: excel excel-vba vba

所以我有多组3列。每个集合始终采用相同的列顺序(“SKU”,“Sales”。“Date”。)

我想知道是否有一个VBA脚本或其他方法可以执行以下操作:

1.) Copy G:I

2.) Paste into A:C

3.) Copy J:L

4.) Paste into A:C (Underneath G:I's data)

5.) Copy M:O

6.) Paste into A:C (underneath J:L's data)

7.) Repeat (I would like it to repeat every 3 columns forever, but if that's not possible I'll manually input the columns if I have
to.)

这是我正在寻找的视觉效果:http://i.imgur.com/AagLIm8.png

我还上传了工作簿,以备您参考:https://www.dropbox.com/s/wea2nr4xbfo4934/Workbook.xlsx?dl=0

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

下面的代码可以满足您的需求,并且我已经包含了一些“.select”行来帮助您理解。我建议你逐步通过它变得清晰,就像动画GIF一样。然后,删除所有“.select”代码行。

enter image description here

Option Explicit
Sub moveData()
Dim rSource As Range, rDest As Range, r As Range
Dim tbl As Range, rowNum As Integer
Const colNum = 3

Set rDest = Range("A1")
Set rSource = Range("G1")
Set r = rSource
While r <> ""
    Set r = Range(r, r.End(xlDown))
    Set tbl = Range(r, r.Offset(0, colNum - 1))
    tbl.Select
    Set tbl = Range(tbl, tbl.End(xlDown).Offset(1, 0))
    tbl.Select
    tbl.Copy
    rDest.Select
    rDest.PasteSpecial (xlPasteAll)
    Set rDest = rDest.Offset(tbl.Rows.Count, 0)
    Set r = r(1, 1)
    r.Select
    Set r = r.Offset(0, colNum)
    r.Select
Wend
End Sub

答案 1 :(得分:0)

尝试这样做:

Sub CopyColumns()

    Dim actualRow As Integer
    Dim actualColumn As Integer

    Dim rowFrom As Integer
    Dim myColumns As Integer
    Dim startColumn As Integer

    myColumns = 3 'the number of columns before start repeating (in your case is SKU, Sales, Date, so there are 3 columns)
    startColumn = 7 'the column where start de data. In your example is the Column G

    actualRow = 1
    actualColumn = 1

    rowFrom = 1

    Dim eoRows As Boolean

    eoRows = False

    While eoRows = False

        'verify if there's no more data
        If Cells(rowFrom, startColumn) = "" Then
            eoRows = True
        Else
            'verify if there's no more row
            While Cells(rowFrom, startColumn) <> ""
                For i = startColumn To startColumn + myColumns - 1
                    Cells(actualRow, actualColumn) = Cells(rowFrom, i)
                    actualColumn = actualColumn + 1
                Next

                rowFrom = rowFrom + 1
                actualRow = actualRow + 1
                actualColumn = 1

            Wend
            rowFrom = 1
            startColumn = startColumn + myColumns

        End If


    Wend

End Sub