excel - VBA将数据从一个表复制到另一个表并重新排列列

标签 excel vba

我在一张名为 tbl_raw 的表中有 99 列.我需要将这些列中的 96 个复制到另一个具有相同标题名称的表中,但它们以不同的顺序重新排列。最有效的方法是什么?

我知道的唯一方法是:
raw_data.Range("tbl_raw[EMPLOYEE]").Copy processed_data.Range("tbl_processed[EMPLOYEE]").PasteSpecial
但是,这需要大量代码(96 * 2 = 192 行),我不确定是否有更有效的方法来做到这一点。

我尝试使用 https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables ,但我也想不出一种方法来处理这些信息。

任何指导将不胜感激。

最佳答案

避免处理复制 ListObject 列并使用直接值传输。

Option Explicit

Sub raw2processed()

    Dim lc As Long, mc As Variant, x As Variant
    Dim raw_data As Worksheet, processed_data As Worksheet
    Dim raw_tbl As ListObject, processed_tbl As ListObject

    Set raw_data = Worksheets("raw")
    Set processed_data = Worksheets("processed")
    Set raw_tbl = raw_data.ListObjects("tbl_raw")
    Set processed_tbl = processed_data.ListObjects("tbl_processed")

    With processed_tbl
        'clear target table
        On Error Resume Next
        .DataBodyRange.Clear
        .Resize .Range.Resize(raw_tbl.ListRows.Count + 1, .ListColumns.Count)
        On Error GoTo 0

        'loop through target header and collect columns from raw_tbl
        For lc = 1 To .ListColumns.Count
            Debug.Print .HeaderRowRange(lc)
            mc = Application.Match(.HeaderRowRange(lc), raw_tbl.HeaderRowRange, 0)
            If Not IsError(mc) Then
                x = raw_tbl.ListColumns(mc).DataBodyRange.Value
                .ListColumns(lc).DataBodyRange = x
            End If
        Next lc

    End With

End Sub

关于excel - VBA将数据从一个表复制到另一个表并重新排列列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55189590/

相关文章:

vba - 将两个范围相乘的最快方法

vba - Excel没有响应VBA

sql-server:我如何知道谁在我的数据库中?

php - 使用 php pdo 将 JSON 转换为 Excel 文件

excel - 评估 Office 应用程序状态栏中的进度条

sql - vba建表时如何指定主键

vba - 将命令行过程的输出定向到 Excel

excel - 单击 Excel 中的超链接会在运行宏之前清除范围选择

excel - 通过 Excel 的 eDrawings API

excel - 查找日期范围内季度中的天数