【问题标题】:Macro in Excel to Copy/Paste Specific Ranges in Two Workbooks into a New Workbook (More Details Inside)Excel 中的宏将两个工作簿中的特定范围复制/粘贴到新工作簿中(更多详细信息在里面)
【发布时间】:2021-09-29 05:57:33
【问题描述】:

我也许可以通过示例更好地描述我想要的东西。我有两个 Excel 工作簿。我想基本上将一个复制到一个新工作簿原样(基本复制/粘贴所有内容),然后复制另一个工作簿的特定部分并粘贴它位于新工作簿的末尾。

因此,有两个输入工作簿和一个输出工作簿。这就是我希望宏的结构:应该有一个包含宏(按钮)的“主”工作簿,其中两个输入工作簿由它们的文件夹路径指定,并且有一个新组合的输出文件夹工作簿(请参阅最后的示例,了解我希望如何指定它)。第一个输入工作簿应该复制其中的所有内容。请注意,这应该是动态的,并且不应指定特定的单元格范围(因为单元格范围可能会有所不同)。第一个输入工作簿的示例如下所示:

一切都将被复制。我认为这不是什么大问题。棘手的部分(对我来说)是然后获取第二个输入工作簿的特定部分并将其复制/粘贴到第一个输入工作簿的末尾。我发现这很困难,因为第二个输入文件夹应该由特定的标题选择,然后应该复制该标题下的所有内容(即选择标题,然后按 CTRL+SHIFT+DOWN)。例如:

这应该以“Maturity[5,)”(以黄色突出显示)作为标题,然后选择其下的所有内容,复制它,然后将其粘贴到第一个输入工作簿末尾的匹配标题(第二行,即第 8 行,顺便说一下,这是所有工作簿的格式:第 1:6 行是空的,但应该保持这样)。

希望你还在我身边。完成此操作后,新的(合并的)工作簿应如下所示:

即使走到这一步也会非常有帮助。但是还有一个问题。通过复制整个第一个输入工作簿,有一个额外的标题(第 7 行;上图中的“L-OAS”)。此标题需要在新组合工作簿的范围内合并并居中,包括添加的第二个输入工作簿部分:

就是这样。一旦该标题被合并并在新工作簿中居中,宏应将新工作簿保存在指定的输出路径中。

要指定的输入/输出路径示例:

编辑:以下是我在做第 (1) 部分的尝试——也就是说,只是复制和粘贴第一个工作簿。


Sub Combine()

Dim wb1 As Workbook
Dim wb2 As Workbook
Dim wsSource As Worksheet, ws As Worksheet

Application.ScreenUpdating = False
shtOutput1.Visible = xlSheetVisible
shtOutput1.Cells.Clear
Set outputRange = shtOutput1.Cells(1, 1)

Set wb1 = Workbooks.Open(Range("USDInputFile1").Value, False, True)

For Each wsSource In wb1.Worksheets

    If InStr(wsSource.Cells(1, 1).Value, "Bloomberg") > 0 Then

        With wsSource

        wsSource.Copy shtOutput1

                End With
    End If
Next

wb1.Close False

Application.ScreenUpdating = True

With Workbooks.Add

    shtOutput1.Copy .Worksheets(1)

    Application.DisplayAlerts = False

    For Each ws In .Worksheets

    Next ws

    Application.DisplayAlerts = True

    .Close True, ThisWorkbook.Names("OutputFolder").RefersToRange.Value + Application.PathSeparator + "USD Combined Output.xlsx"

End With

shtOutput1.Cells.Clear

shtOutput1.Visible = xlSheetHidden

 
End Sub

  1. “shtOutput1”是主工作簿中的一个工作表(其中宏 按钮和文件路径位于

  2. “USDInputFile1”是主工作簿中的一个命名单元格,它导致 第一个输入工作簿的文件路径(即“wb1”-“wb2”将 成为第二个输入工作簿)

【问题讨论】:

  • 你试过什么vba代码?或者你被困在哪里了?
  • @PGSystemTester 请查看编辑。这将复制并保存第一个工作簿(即,将所有内容复制并粘贴到新工作簿中,然后保存)——但我仍在努力处理第二部分(使用第二个输入工作簿)

标签: excel vba automation


【解决方案1】:

让我们退后一步,从可扩展性的角度来看待这个问题。

你不想要一个按钮来组合东西,因为有很多问题会出错,而且你必须明智地做 VBA,而且在按下按钮的顶部是一个按钮...... ppffft 那是工作。 ..

您想要的不是无缝更新,其中添加到 Maturity 5 或 Maturity 10 的任何内容都会自动更新到您的输出中,让它们像 Microsoft 预期的那样自行增长而不受影响。

  1. 首先让我们看一下结构,有一些,它们有标题,但它们不是表格,它们都有一个共同的 ID 日期,因此更改最底部的标题以确保它们有意义并且是统一的、唯一的和一致的每个表的所有迭代。因此,无论您拥有多少 Mat5_Total 或 Mat10_Total 等。

  2. 插入选项卡 - 表格 - 给他们适当的速记表格名称,例如 tblMat10 和 tblMat5

  3. 让我们打开一个新文件并使用功能区中的数据选项卡 - 外部数据 - 转换 - 关闭加载上的小向下箭头,您只希望数据模型中的这个不加载到电子表格中所以检查 创建仅连接将此数据添加到数据模型。取消选中其他所有内容,您的输出无需混乱。

  4. 重复 3,但 Mat10 仅当您关闭负载而不是向右看并点击 Merge Queries 上的向下箭头 - 作为新查询。

  5. 现在将弹出一个新窗口 选择两个查询并在其日期作为 ID 加入它们

  6. 现在您可以关闭并加载到工作表。

试一试,将一些新数据添加到 Mat5 或 Mat10 并刷新您新创建的链接表。

这适用于所有类型的数据,您可以尝试使用股票、股票、CSV、ODBC 连接各种数据连接。您所需要的只是一个格式正确的基础架构,也就是格式正确的表格!

此方法的一个好处是,如果表不断发展,修改 Power Query 很容易。只需记住进入您的连接设置并选择打开时刷新,如果您愿意,可以将其设置为每 5 分钟刷新一次。

7 可选奖励 - 制作此输出表后,它将与任何外部程序兼容,因为它是格式正确的输出表。

【讨论】:

  • 感谢您的回复 - 但我根本不想编辑电子表格的格式。这些是供应商提供的,需要采用下游依赖项的描述格式。
  • 什么是Staging 10 分...除了笑话,您所做的是作为 ETL 的一部分提取(提取转换负载)转换数据需要几个部分,暂存是第一部分和正确处理很重要,因为根据上述内容,如果您不暂存数据,则处理起来会变得一团糟……请参阅您的原始帖子。因此,您需要将其放入表格中。您可以通过获取原始的混乱并添加一个帮助表来做到这一点,它只是在 =Cells 中包含它自己的标题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-02
  • 1970-01-01
  • 2016-10-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多