VBA宏将列数据附加到最后一行

时间:2016-11-06 16:15:41

标签: excel-vba macros vba excel

我对VBA很新,并试图合并一个包含20万行的excel文件。

我的Excel格式是

enter image description here

你可以看到那里有如此多的重复数据。我想通过附加其他列数据使整个工作表只有4列,因为标题相同。

例如:

Data in the columns  F2-I2 will go to A4 - D4 

                     F3 - I3 will go to A5 - D5

similarly

                     K2 - N2 will go to A6 - D6

                     K3 - N3 will go to A7 - D7

并遵循

我想编写一个VBA宏,并且通过运行宏,它应该通过附加所有其他列数据使excel只有4列。

有人可以帮助我实现这一目标。

注意:执行此操作后,我的Excel将有大约100万行。所以我正在寻找性能良好的解决方案。

1 个答案:

答案 0 :(得分:0)

我认为这只能通过循环遍历块,列和行来解决,如果你有一百万个值,这可能需要一些时间。

要提高性能,请禁用screenUpdating并确保宏不会崩溃,包括循环中的DoEvents()。

请注意,Excel中的最大行数为1' 048' 576

Sub moveValues()

Application.ScreenUpdating = False
Dim i As Integer
Dim j As Integer
Dim k As Long
Dim row As Long
Dim col As Integer
Dim lastRowTarget As Long
Dim lastRowSource As Long

Dim wks As Worksheet

Set wks = Sheets("Sheet1")

For i = 6 To 16 Step 5
    lastRowSource = wks.Cells(Rows.Count, Chr(64 + i)).End(xlUp).row
    lastRowTarget = wks.Cells(Rows.Count, "A").End(xlUp).row
    col = 1
    For j = i To i + 3
        For k = 2 To lastRowSource
            wks.Cells(lastRowTarget + k - 1, col) = wks.Cells(k, j)
            DoEvents
        Next k
        col = col + 1
    Next j
Next i
Application.ScreenUpdating = True
End Sub