使用VBA循环将数据从一个工作表复制到另一个工作表

时间:2017-10-13 13:43:29

标签: database vba loops for-loop

我是VBA编程的新手,所以我需要你的帮助。我必须创建一个宏,将数据从一个工作表复制到另一个工作表。所以我所做的就是将宏(使用宏录制器)录制到我必须复制/粘贴的步骤。现在我必须创建一个循环来完成我需要的所有信息。

以下是包含数据的工作表的屏幕截图:

Monthly Report Image

以下是应粘贴数据的工作表的屏幕截图:

Desired Result Image

让我们谈谈我的报告中包含的数据。我有一份针对我公司服务的国家/地区的月度报告。在这个月的每一天,我有一些预测,应该上传到我们的数据库。

这是我已有的代码:

Sub manual_upload()

    Sheets("Forecast").Select

    Range("G1").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Upload").Select
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True


    Sheets("Forecast").Select
    'ActiveWindow.ScrollColumn = 2
    'ActiveWindow.ScrollColumn = 1

    Range("C2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Upload").Select

    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False


    Application.CutCopyMode = False
    Range("A2").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, 1).Select
    Range(Selection, Selection.End(xlUp)).Select
    Selection.FillDown

    'Selection.AutoFill Destination:=Range("B2:B31")
    'Range("B2:B31").Select

    Sheets("Forecast").Select
    Range("E2").Select
    Selection.Copy
    Sheets("Upload").Select

    Range("C2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False

    Range("b2").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, 1).Select
    Range(Selection, Selection.End(xlUp)).Select
    Selection.FillDown

    'Selection.AutoFill Destination:=Range("C2:C31")
    'Range("C2:C31").Select

    Sheets("Forecast").Select
    Range("B2").Select
    Selection.Copy
    Sheets("Upload").Select

    Range("D2").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False

    Range("c2").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(0, 1).Select
    Range(Selection, Selection.End(xlUp)).Select
    Selection.FillDown

    'Selection.AutoFill Destination:=Range("D2:D31")
    'Range("D2:D31").Select

    Range("E2").Select
    Sheets("Forecast").Select
    Range("G2").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Sheets("Upload").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    Sheets("Forecast").Select
    Range("D2").Select
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Upload").Select
    Range("F2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    Selection.AutoFill Destination:=Range("F2:F31")
    Range("F2:F31").Select

    'next i
End Sub

我不知道如何启动循环。哪些数据应该像各种等一样添加 我将非常感谢你的帮助。

1 个答案:

答案 0 :(得分:1)

如果数据全部在一个工作表中,那么这里是一个没有VBA执行这些步骤的指南(如果数据在不同的工作表中,您可以使用具有相同结构的多个查询的合并):

1)选择您的数据并按Control + T设置为表格: Table

2)使用powerquery导入数据(excel 2016 from table选项位于Data选项卡中,在早期版本中,您需要安装powerquery add in并使用power选项卡)。将出现一个窗口,其中包含您的表数据。然后,您将使用此数据视图。

Adding to powerquery from table

3)通过突出显示删除不需要的列,然后右键单击删除

Remove columns

4)选择Date列并取消忽略。您可以选择第一个日期列,然后按住shift并选择上一个日期列以突出显示所有)

Unpivot date columns

5)双击列标题以重命名,例如属性 - >日期,价值 - >预测,DB中的名称 - >国家

Renaming columns

6)检查数据类型是否正确

Setting column data types

7)重新排列列以匹配所需的输出,方法是拖动它们以重新排列

Re-arrange column order

8)最后关闭并加载到您的工作表

Close and load

9)查看结果

Result

10)您可以将数据添加到源表,然后单击查询上的刷新以更新所有内容。在图像中表示不同的表,因为此图像是稍后编辑以响应问题。在结果表中选择单元格时,将显示查询窗口,您将看到查询的名称和绿色刷新箭头。单击此按钮可在源数据发生更改时进行更新。

enter image description here