Excel vba:将多个文件合并到一个工作表中

时间:2017-07-26 08:00:57

标签: excel vba excel-vba

我在一个文件夹中有100多个文件。每个文件有3个列表,但只有1个列表包含数据。我需要从每个文件中获取数据并将其合并到一个列表中的单个文件中。我为它写了一个子,但我不确定如何选择只需要的范围(因文件而异) - 就像你在Ctrl + Shift + left arrow + down arrow的键盘上一样。我应该如何在结果工作簿中将其粘贴到之前粘贴的数据之后的第一个空闲行?

Sub combine()
        Application.ScreenUpdating = False
        Application.DisplayAlerts = False
        Application.Calculation = xlCalculationManual

        Dim ExcelApp As Object
        Set ExcelApp = CreateObject("Excel.Application")
        ExcelApp.Visible = False
        ExcelApp.ScreenUpdating = False
        ExcelApp.DisplayAlerts = False
        ExcelApp.EnableEvents = False

        '**VARIABLES**
        Dim folderPath As String
        folderPath = "Y:\plan_graphs\final\mich_alco_test\files\"

        'COUNT THE FILES
        Dim totalFiles As Long
        totalFiles = 0
        Dim fileTitle As String
        fileTitle = Dir(folderPath & "*.xl??")
        Do While fileTitle <> ""
            totalFiles = totalFiles + 1
            fileTitle = Dir()
        Loop

        'OPENING FILES
        Dim resultWorkbook As Workbook
        Dim dataWorkbook As Workbook
        Set resultWorkbook = ExcelApp.Application.Workbooks.Open("Y:\plan_graphs\final\mich_alco_test\result.xlsx")


        fileTitle = Dir(folderPath & "*.xl??")

        'FOR EACH FILE
        Do While fileTitle <> ""
            Set dataWorkbook = ExcelApp.Application.Workbooks.Open(folderPath & fileTitle)
            dataWorkbook.Worksheets("List1").Range("A1").Select
            dataWorkbook.Worksheets("List1").Selection.CurrentRegion.Select


             `resultWorkbook.Range
             fileTitle = Dir()
         Loop

    ExcelApp.Quit
    Set ExcelApp = Nothing
End Sub

3 个答案:

答案 0 :(得分:2)

我可能误解了这个问题,不幸的是我无法发表评论。如果我把这个问题弄错了,我会删除。

  

但我不确定如何选择只需要的范围

这表示您拥有动态数据量,并希望使用Range来获取选择。

假设您知道所述数据所在位置的列位置(在这种情况下,我的列表从B2开始,我们知道它的结束位置。您可以使用Range来动态选择所有数据:

Dim rcell As Range
Dim rng As Range

Set rng = ActiveSheet.Range("B2", Range("B2").End(xlDown))

For Each rcell In rng.Cells
    Debug.Print rcell.Value
Next rcell

End Sub

首先我们定义一个Range变量并将其分配到从B2开始的范围,并使用.End(xlDown)我们可以选择一个以最终条目结尾的范围。

有关.End()的进一步阅读,请参阅here.

希望这会有所帮助。

答案 1 :(得分:1)

您可以在没有VBA的情况下执行此操作。使用Get&amp;转而改变。
以下是帮助您入门的几个步骤:

  1. 转到数据标签
  2. 在Get&amp;转换,选择新查询 - 从文件 - 从文件夹
  3. 选择包含所有100多个文件的文件夹
  4. 选择包含数据的标签
  5. 你快到了。做最后的修复(如果需要)
  6. 完成后,点击关闭&amp;负载

答案 2 :(得分:0)