合并工作表并在Excel中添加列

用户名

我有一个工作表,其中包含多个标识不同数据源的选项卡。我需要将所有工作表合并为一个,并在工作表名称中添加一列作为新合并表的一部分。

我找到了以下代码,如果我将其剪切/粘贴到工作表中,则它的工作方式就像一个迷人的按钮,但我有几本工作簿,而且我必须能够每月重新创建此过程。

我的研究表明,我应该创建一个com add in或可调用的宏来执行此操作,但是每次尝试时,该过程都会失败。如果somone可以为我指出在Excel(2013)中执行此操作的步骤并建议我的代码是否可以工作,我将不胜感激。
提前致谢。

Sub Combine()
    Dim J As Integer, wsNew As Worksheet
    Dim rngCopy As Range, rngPaste As Range
    Dim Location As String

    On Error Resume Next
    Set wsNew = Sheets("Combined")
    On Error GoTo 0
        'if sheet does not already exist, create it
        If wsNew Is Nothing Then
        Set wsNew = Worksheets.Add(before:=Sheets(1)) ' add a sheet in first place
        wsNew.Name = "Combined"
    End If

    'copy headings and paste to new sheet starting in B1
    With Sheets(2)
        Range(.Range("A1"), .Cells(1, Columns.Count).End(xlToLeft)).Copy wsNew.Range("B1") 
    End With

    ' work through sheets
    For J = 2 To Sheets.Count ' from sheet 2 to last sheet
        'save sheet name/location to string
        Location = Sheets(J).Name

        'set range to be copied
        With Sheets(J).Range("A1").CurrentRegion
            Set rngCopy = .Offset(1, 0).Resize(.Rows.Count - 1)
        End With

        'set range to paste to, beginning with column B
        Set rngPaste = wsNew.Cells(Rows.Count, 2).End(xlUp).Offset(2, 0)

        'copy range and paste to column *B* of combined sheet
        rngCopy.Copy rngPaste

        'enter the location name in column A for all copied entries
        Range(rngPaste, rngPaste.End(xlDown)).Offset(0, -1) = Location

    Next J
End Sub
蒂姆·威廉姆斯

您可以将此代码添加到您的“个人宏工作簿”中,然后对其进行修改,使其对ActiveWorkbook起作用。这样,当您运行它时,它将在Excel中选择的任何工作簿上运行。

同样值得用工作簿对象引用来限定所有工作表引用。当您使用(例如)时:

Sheets("Combined")

然后默认情况下将引用ActiveWorkbook通常这是您想要的(虽然可能不是),但是如果(例如)您在代码中打开/激活了另一个工作簿,并且以其他工作簿作为Sheets(....)参考的目标,则以这种方式工作可能会导致问题您可以通过始终明确指出要引用的工作簿来解决此问题:例如-

ThisworkBook.Sheets()             'the workbook containing the running code
ActiveWorkbook.Sheets()           'the selected workbook
Workbooks("test.xlsx").Sheets()   'named workbook
wb.Sheets()                       'use a variable set to a workbook object

因此,修改现有代码:

Sub Combine()
    Dim wb As Workbook
    Dim J As Integer, wsNew As Worksheet
    Dim rngCopy As Range, rngPaste As Range
    Dim Location As String

    Set wb = ActiveWorkbook

    On Error Resume Next
    Set wsNew = wb.Sheets("Combined")
    On Error GoTo 0
        'if sheet does not already exist, create it
        If wsNew Is Nothing Then
        Set wsNew = wb.Worksheets.Add(before:=wb.Sheets(1)) ' add a sheet in first place
        wsNew.Name = "Combined"
    End If

    'copy headings and paste to new sheet starting in B1
    With wb.Sheets(2)
        .Range(.Range("A1"), .Cells(1, Columns.Count) _
                   .End(xlToLeft)).Copy wsNew.Range("B1") 
    End With

    ' work through sheets
    For J = 2 To wb.Sheets.Count ' from sheet 2 to last sheet
        'save sheet name/location to string
        Location = wb.Sheets(J).Name

        'set range to be copied
        With wb.Sheets(J).Range("A1").CurrentRegion
            Set rngCopy = .Offset(1, 0).Resize(.Rows.Count - 1)
        End With

        'set range to paste to, beginning with column B
        Set rngPaste = wsNew.Cells(Rows.Count, 2).End(xlUp).Offset(2, 0)

        'copy range and paste to column *B* of combined sheet
        rngCopy.Copy rngPaste

        'enter the location name in column A for all copied entries
        wsNew.Range(rngPaste, rngPaste.End(xlDown)).Offset(0, -1) = Location

    Next J

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

合并工作表并在Excel中添加列

来自分类Dev

Excel-VBA代码以添加列ID,然后将所有工作表合并为工作表

来自分类Dev

在我的mysql表的两列中合并具有相同值的重复行,并在第三列中添加值

来自分类Dev

使用vba需要帮助以从动态工作表中选择具有动态数据的行,并在Excel中合并到新工作表中

来自分类Dev

使用vba需要帮助以从动态工作表中选择具有动态数据的行,并在Excel中合并到新工作表中

来自分类Dev

合并来自几个工作表的数据,这些工作表在Excel中具有相同的列但行数不同

来自分类Dev

在一列中合并2个具有共同值的Excel工作表

来自分类Dev

如何使用Perl删除Excel工作表中的整个列并在新的Excel文件中写入更新的数据?

来自分类Dev

如何使用Perl删除Excel工作表中的整个列并在新的Excel文件中写入更新的数据?

来自分类Dev

合并重复的行并在R中添加列

来自分类Dev

VBA选择工作表中的所有列并在Excel 2010中自动调整所有列的宽度

来自分类Dev

遍历Excel工作表并根据列值合并行

来自分类Dev

每次合并新工作表时如何向Excel工作表添加计数器?

来自分类Dev

在Excel中,是否有可能包含一个包含所有工作表名称的表列,并在添加/删除工作表时动态调整其大小?

来自分类Dev

在合并/合并的Excel文件中添加额外的列

来自分类Dev

循环读取和合并R中的多个Excel工作表

来自分类Dev

循环读取和合并R中的多个Excel工作表

来自分类Dev

如何在Excel中搜索和合并多个工作表?

来自分类Dev

Excel:合并多个工作表中包含值的行

来自分类Dev

在python的Excel工作表的每一行中为MIN值添加额外的列

来自分类Dev

读取Excel工作表,并在读取后添加到列表框。C#

来自分类Dev

通过合并对象属性在表中添加列

来自分类Dev

在python中将不同工作表中的列合并为单个工作表

来自分类Dev

在Excel中添加新工作表(由vbscript控制)

来自分类Dev

在Excel中添加另一个工作表

来自分类Dev

将几张工作表汇总到一个最终的Table Excel中,并在摘要中包括新工作表

来自分类Dev

用于比较 Excel 中的多个工作表并在新工作表中按升序显示它们的函数或代码

来自分类Dev

如何通过使用ID列堆叠列来合并Excel工作表?

来自分类Dev

Google表格查询中以任何方式合并/附加两列的结果并向结果中添加文本吗?(我知道工作表查询中没有concat)

Related 相关文章

  1. 1

    合并工作表并在Excel中添加列

  2. 2

    Excel-VBA代码以添加列ID,然后将所有工作表合并为工作表

  3. 3

    在我的mysql表的两列中合并具有相同值的重复行,并在第三列中添加值

  4. 4

    使用vba需要帮助以从动态工作表中选择具有动态数据的行,并在Excel中合并到新工作表中

  5. 5

    使用vba需要帮助以从动态工作表中选择具有动态数据的行,并在Excel中合并到新工作表中

  6. 6

    合并来自几个工作表的数据,这些工作表在Excel中具有相同的列但行数不同

  7. 7

    在一列中合并2个具有共同值的Excel工作表

  8. 8

    如何使用Perl删除Excel工作表中的整个列并在新的Excel文件中写入更新的数据?

  9. 9

    如何使用Perl删除Excel工作表中的整个列并在新的Excel文件中写入更新的数据?

  10. 10

    合并重复的行并在R中添加列

  11. 11

    VBA选择工作表中的所有列并在Excel 2010中自动调整所有列的宽度

  12. 12

    遍历Excel工作表并根据列值合并行

  13. 13

    每次合并新工作表时如何向Excel工作表添加计数器?

  14. 14

    在Excel中,是否有可能包含一个包含所有工作表名称的表列,并在添加/删除工作表时动态调整其大小?

  15. 15

    在合并/合并的Excel文件中添加额外的列

  16. 16

    循环读取和合并R中的多个Excel工作表

  17. 17

    循环读取和合并R中的多个Excel工作表

  18. 18

    如何在Excel中搜索和合并多个工作表?

  19. 19

    Excel:合并多个工作表中包含值的行

  20. 20

    在python的Excel工作表的每一行中为MIN值添加额外的列

  21. 21

    读取Excel工作表,并在读取后添加到列表框。C#

  22. 22

    通过合并对象属性在表中添加列

  23. 23

    在python中将不同工作表中的列合并为单个工作表

  24. 24

    在Excel中添加新工作表(由vbscript控制)

  25. 25

    在Excel中添加另一个工作表

  26. 26

    将几张工作表汇总到一个最终的Table Excel中,并在摘要中包括新工作表

  27. 27

    用于比较 Excel 中的多个工作表并在新工作表中按升序显示它们的函数或代码

  28. 28

    如何通过使用ID列堆叠列来合并Excel工作表?

  29. 29

    Google表格查询中以任何方式合并/附加两列的结果并向结果中添加文本吗?(我知道工作表查询中没有concat)

热门标签

归档