在Microsoft Excel中将多个表复制到一个表的4种方法

在Microsoft Excel中将多个表复制到一个表的4种方法

您是否需要快速将多个表格复制到 Excel 中的一个表格中,以便鸟瞰数据?您来对地方了。继续阅读!

从 Excel 工作簿中的数据块中获取见解的一种方法是将所有数据集或表格合并到一个工作表中。然后,应用数据分析公式或创建图表以直观地展示数据所要表达的故事。

您可以浏览 Excel 工作簿的所有工作表以查找数据表或数据集。然后,将它们逐一复制到新工作表中。如果工作簿包含数百张工作表,并且每张工作表包含多个表格,则可能需要数月才能创建包含所有表格的工作表。

以下是 Excel 的一些很酷的功能,例如函数, Excel VBA, Power Query和 Office 脚本。

在本教程中,您将探索多种方法,将多个表格合并到一个工作表中,以便并排比较数据或进行汇总数据分析。这些方法使用上述 Excel 工具来自动化该过程,从而消除因重复复制粘贴 Excel 数据而导致的人为错误。

推荐:在Microsoft Excel中暂停或延迟VBA脚本的方法

为什么要在 Excel 中将多个表复制到一个表

以下是在 Excel 中将多个表复制到一个表的原因:

  1. 它将来自不同表的数据合并到一张表中,以便于分析和报告。
  2. 该流程将所有相关信息集中在一个位置,从而简化了数据管理。
  3. 这可以帮助您避免在多个表之间切换,从而节省时间和精力。
  4. 它支持强大的 Excel 函数和公式来处理合并数据。
  5. 该过程可帮助您使用单一数据源创建动态报告和仪表板。
  6. 它有助于跨多个数据集进行数据排序、过滤和搜索。
  7. 您还可以通过使用合并数据来增强数据可视化和图表功能
  8. 该流程通过共享单一、统一的数据集简化了团队成员之间的协作。

使用 Excel VBA、Office 脚本和 Power Query 将多个表复制到一个表的原因

与 VLOOKUP、INDEX 和 MATCH、VSTACK 和 HSTACK 等手动函数相比,使用 Excel VBA、Power Query 和 Office 脚本将多个表合并为一个表具有以下好处:

  1. 这些工具使您能够自动化表合并过程,以便您可以使用更少的员工来管理业务中的数据输入和分析过程。
  2. 通过自动化整个表合并过程,您可以避免人为错误和合规风险。
  3. 您可以设置合并表格的特定规则,上述工具将始终提供相同的数据组织。因此,您可以标准化合并表格过程的外观、结构和完整性。
  4. 这些工具还具有高度定制性,因此可以适应任何业务场景。
  5. 您和您的数据分析师可以将更多精力放在实际的数据分析过程上,而 Excel 则在后端完成所有数据组织和管理过程。
  6. 您可以从当前项目创建模板,并在未来的项目中重复使用该模板。

现在您知道在 Excel 中将多个表复制到一个表并使用 Office 脚本、Power Query 和 Excel VBA 自动执行该过程的优势,现在是时候探索下面的实际方法了。

VSTACK 和 HSTACK 函数用于合并表

堆栈堆栈 Excel 中的公式还允许您将多个表数据合并到一个表中,而无需使用任何复杂的步骤。但是,与本文中提到的其他方法相比,自动化机会较少。

使用 VSTACK 垂直合并表

在Microsoft Excel中将多个表复制到一个表的4种方法
在Microsoft Excel中将多个表复制到一个表的4种方法
使用 VSTACK

以下是合并同一工作簿中的表格的步骤:

  1. 转到您想要合并表格的工作表。
  2. 突出显示一个单元格并输入以下公式:
=VSTACK(Table1[#All],Table2[#All],Table3[#All])
  1. 进入
使用 VSTACK 合并所有表
  1. 您将立即在目标工作表中看到以上所有内容的堆叠表。

要自定义上述公式,请替换 Table1[#All] 用工作簿的表名,然后替换下一个, Table2[#All] 等等。

如果您只想获取第一个表的标题,请尝试以下公式:

=VSTACK(Table1[#Headers],Table1,Table2,Table3)

上图是使用替代方案的体现 堆栈 Excel 中的函数。

使用 HSTACK 水平合并表

使用 HSTACK
使用 HSTACK

水平合并表格的方法如下:

  1. 突出显示一个单元格并输入以下公式:
=HSTACK(Table1[#All],Table2[#All],Table3[#All])
使用 HSTACK 水平合并表
使用 HSTACK 水平合并表
  1. 进入 从所引用的来源获取水平组合表。

要使这些公式在您自己的工作簿中发挥作用,只需替换 Table1[#All]Table2[#All]等,与工作簿中的实际表名相同。

您还可以通过在最后一个数组引用的末尾添加 Excel 分隔符(逗号)并输入新的数组引用来添加更多数组。

使用 Excel VBA 将多个表垂直复制到一个表

您可以使用此 Excel VBA 脚本将工作簿中多个工作表中的表格堆叠到一个工作表中。这适合在一个大表中分析不同月份的销售或绩效数据。

例如,我获得了 二月, 和 3月 在工作簿的三个不同工作表中。假设我需要了解第一季度的销售业绩,我需要将所有月度销售表放在一个大表中。

我可以使用 VBA 脚本来消除人为错误和重复任务,而不必逐一复制表格。下面是您也可以用来完成相同操作的步骤:

  1. Alt + F11 调用 Excel VBA 编辑器 工具。
  2. 点击 插入 按钮并选择 模块
  3. 在新创建的模块中,复制并粘贴此 VBA 脚本:
Sub StackTablesVertically()
    Dim wsSource As Worksheet
    Dim wsDestination As Worksheet
    Dim lastRow As Long
    Dim destLastRow As Long
    Dim rngSource As Range
    Dim rngDestination As Range
    
    Set wsDestination = ThisWorkbook.Sheets("Sheet4")
    
    wsDestination.UsedRange.Clear
    
    For Each wsSource In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
        Set rngSource = wsSource.Range("A2:D9")
        
        destLastRow = wsDestination.Cells(wsDestination.Rows.Count, "A").End(xlUp).Row + 1
        
        Set rngDestination = wsDestination.Range("A" & destLastRow)
        
        rngSource.Copy rngDestination
        
        destLastRow = destLastRow + rngSource.Rows.Count
    Next wsSource
End Sub
  1. 点击 节省 按钮并关闭 Excel VBA 编辑器 界面。
设置 VBA 脚本
设置 VBA 脚本
  1. 在工作簿中创建一个新工作表并命名 表4
创建新工作表
创建新工作表
  1. 现在,致电 对话框,按 Alt + F8 键。
  2. 在那里,选择 垂直堆叠表格 宏并单击 跑步 按钮。
  3. 表4 你应该找到所有销售数据表 工作表1工作表3
使用 Excel VBA 将多个表复制到一个表
使用 Excel VBA 将多个表复制到一个表

您可以按照以下方法修改上述 VBA 脚本,以使其适用于您自己的数据集:

  • 代替 "Sheet4" 目标工作表名称如下 "Sheet5""QuarterlySales", ETC。
  • 如果需要从更多工作表复制表格,请在此代码元素中添加工作表名称 (Array("Sheet1", "Sheet2", "Sheet3"))。 例如, (Array("Sheet1", "Sheet2", "Sheet3", "Sheet5", "Sheet6"))
  • code 元素 "A2:D9" 告诉 Excel 要从每个工作表中复制哪个单元格区域。如果工作表中的数据表大于 "A2:D9",相应调整单元格范围。

上述 VBA 脚本仅复制同一单元格范围内的表格,即 "A2:D9"如果需要从不同工作表的不同单元格区域复制表格,请使用以下代码:

Sub StackTablesVertically()
    Dim wsSource As Worksheet
    Dim wsDestination As Worksheet
    Dim lastRow As Long
    Dim destLastRow As Long
    Dim rngSource As Range
    Dim rngDestination As Range
    Dim tableRange As Range
    
    Set wsDestination = ThisWorkbook.Sheets("Sheet5")
    
    wsDestination.UsedRange.Clear
    
    For Each wsSource In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
        Select Case wsSource.Name
            Case "Sheet1"
                Set tableRange = wsSource.Range("A2:D9")
            Case "Sheet2"
                Set tableRange = wsSource.Range("B2:C9")
            Case "Sheet3"
                Set tableRange = wsSource.Range("C2:D9")
            'Add more cases for other sheets if needed
            'Case "Sheet4"
            '   Set tableRange = wsSource.Range("...")
            '...
            Case Else
                'If the sheet is not included in the list, skip it
                GoTo ContinueLoop
        End Select
        
        destLastRow = wsDestination.Cells(wsDestination.Rows.Count, "A").End(xlUp).Row + 1
        Set rngDestination = wsDestination.Range("A" & destLastRow)
        
        tableRange.Copy rngDestination
        
        destLastRow = destLastRow + tableRange.Rows.Count
        
ContinueLoop:
    Next wsSource
End Sub
复制具有不同单元格范围的表格
复制具有不同单元格范围的表格

推荐:如何在Excel中创建热力图

使用 Excel VBA 将多个表水平复制到一个表

如果您需要并排显示数据表以更好地了解绩效、销售额或任何其他数据,则可以通过从不同的工作表中复制将它们水平堆叠在一个工作表中。以下是用于自动执行此任务的 VBA 代码:

Sub StackTablesHorizontally()
    Dim mainSheet As Worksheet, sourceSheet As Worksheet
    Dim mainRange As Range, sourceRange As Range
    Dim lastCol As Long, newRow As Long
    Dim sheetNames As Variant
    Dim i As Long
    
    Set mainSheet = ThisWorkbook.Sheets("Sheet6")
    Set mainRange = mainSheet.Range("A2")
    
    sheetNames = Array("Sheet1", "Sheet2", "Sheet3")
    
    For i = 0 To UBound(sheetNames)

        If Evaluate("ISREF('" & sheetNames(i) & "'!A1)") Then

            Set sourceSheet = ThisWorkbook.Sheets(sheetNames(i))
            Set sourceRange = sourceSheet.Range("A2:D9")
            sourceRange.Copy mainRange
            
            lastCol = mainSheet.Cells(2, mainSheet.Columns.Count).End(xlToLeft).Column + 1
            
            Set mainRange = mainSheet.Cells(2, lastCol)
        End If
    Next i
    
    Application.CutCopyMode = False
    
    mainSheet.Cells.EntireColumn.AutoFit
End Sub
在 Excel 中水平复制多个表格到一个表格
在 Excel 中水平复制多个表格到一个表格

在 Excel 工作簿上运行 VBA 脚本的过程与前面所述相同。以下是自定义脚本以适合您自己的数据集的说明:

  • "Sheet6" 是目标工作表。请根据您的工作簿进行更改。
  • Range("A2") 告诉 Excel 开始从 A2 单元格。如果您想在不同的单元格中启动它,请在此处输入。
  • 如果您的工作簿包含的工作表多于代码中所述的工作表,请在此代码元素中添加这些工作表: Array("Sheet1", "Sheet2", "Sheet3")。 例如 Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5" )

使用 Office 脚本将多个表复制到 Excel 中的一个表

您是否需要使用自动化功能将多个表格复制到 Excel 在线应用程序上的一个大表格中?您可以使用 Office 脚本。

如果您拥有 Microsoft 365 商业标准版或更好的订阅计划,则可以在 Excel 网页版应用中访问此功能。连接到互联网后,该功能也可在 Excel for Microsoft 365 桌面应用中使用。

转到 Excel 在线或桌面工作表,查看功能区菜单上是否有“自动化”选项卡。如果有,您可以按照以下步骤操作:

  1. 点击 自动化 选项卡并转到 脚本工具 命令块。
  2. 在那里,点击 新脚本 按钮。
  3. 现在,复制并粘贴以下内容 办公室脚本 代码到 代码编辑器 控制板:
function main(workbook: ExcelScript.Workbook) {
	// Add a new worksheet with name "Sheet4"
	let sheet4 = workbook.addWorksheet("Sheet4");
	// Set range A1 on sheet4
	sheet4.getRange("A1").setFormulaLocal("=VSTACK(Table1[#Headers],Table1,Table2,Table3)");
}
  1. 点击 保存脚本 按钮保存代码以供将来使用。
  2. 跑步 按钮来执行代码。
使用 Office 脚本将多个表复制到 Excel 中的一个表

前往 表4 在您的工作簿中,您应该看到 Excel 将所有源表复制到表格的标题列下 工作表1

如果您需要源工作表中各个表的标题列,请使用以下代码:

function main(workbook: ExcelScript.Workbook) {
	// Add a new worksheet with name "Sheet4"
	let sheet4 = workbook.addWorksheet("Sheet4");
	// Set range A1 on sheet4
	sheet4.getRange("A1").setFormulaLocal("=VSTACK(Table1[#All],Table2[#All],Table3[#All])");
}
Office 脚本复制包含所有标题的表格

需要使用 Office 脚本并排复制一个 Excel 工作表中的多个表格吗?是的,您也可以这样做。以下是您可以使用的脚本:

function main(workbook: ExcelScript.Workbook) {
	// Add a new worksheet with name "Sheet4"
	let sheet4 = workbook.addWorksheet("Sheet4");
	// Set range A1 on sheet4
	sheet4.getRange("A1").setFormulaLocal("=HSTACK(Table1[#All],Table2[#All],Table3[#All])");
}
将多个表格水平复制到单个表格中

使用 Power Query 将多个表复制到一个表

从外部数据源导入表或在本地 Excel 工作簿中组织表时,可以使用 Power Query 工具来合并表格。此方法带有可视化界面,因此您可以看到正在合并哪些表格。

在 Power Query 中附加表

附加查询 Power Query 的功能可让您将多个表水平复制到一个表中。以下是详细步骤,您可以按照以下步骤操作:

  1. 点击 数据 选项卡并转到 获取和转换数据 堵塞。
  2. 在那里,点击 获取数据 并将鼠标悬停在 从文件
  3. 在溢出菜单中,选择 从 Excel 工作簿
来自 Excel 工作簿
来自 Excel 工作簿
  1. 导航到 导入数据 对话框,选择它,然后单击 进口
将文件导入 Power Query
将文件导入 Power Query
  1. Power Query 导航器 向导,勾选 选择多个项目 复选框。
  2. 选择所有想要并排复制的表格。
  3. 点击 转换数据 打开表格 Power Query 编辑器
转换数据
转换数据
  1. 结合 按钮 Power Query 主页 选项卡并选择 附加查询
附加表
附加表
  1. 追加向导, 选择 三张或以上桌子
  2. 将所有表格添加到右侧列并单击 好的
追加向导
追加向导
  1. 点击 关闭并加载 将附加表插入工作簿中的新表。
使用 power query 垂直复制多个表
使用 power query 垂直复制多个表

在 Power Query 中合并表

假设您想要并排显示所有表格,您应该在 Power Query 上执行以下操作:

  1. 按照步骤操作 1 通过 7 如上所述打开所有表 Power Query 编辑器
  2. 现在,点击 结合 按钮并选择 合并查询
合并查询
合并查询
  1. 合并 向导,选择 表 2
  2. 单击同一列(物品) 均在表格上。
  3. 点击 好的
合并查询向导
合并查询向导
  1. 双面箭头 新添加的表上的图标,然后单击 好的
包括表格组件
包括表格组件
  1. 再次点击 合并查询 并添加 表3表格1
添加表 3
添加表 3
  1. 点击 双向箭头表3 并点击 好的 包括其所有列。
  2. 点击 关闭并加载 将合并的表作为新表导入工作簿中。
水平合并表
水平合并表

结论

您已经学习了三种不同的 Excel 工具,用于将多个表复制到 Excel 中的一个表。它们是 Excel VBA、Office Scripts 和 Power Query。

尝试适合您的 Excel 工作簿和项目的方法。不要忘记在下面发表评论来表达您对这些方法的体验。

推荐:如何在iPhone iOS 17中自动暂停GIF


发表评论