【问题标题】:Macro : Copy data from two Worksheets and Join together in third宏:从两个工作表中复制数据并在第三个中加入
【发布时间】:2018-11-16 12:56:15
【问题描述】:

我的 excel 文件,有多个标签。其中一张是“已安排员工访问”,另一张是“已安排 IERWAA 查找”。这两张表具有相同的数据(A 到 J 列),但它们的来源不同(这就是为什么它们位于两个单独的表中)。标题在第 1 行,行数不固定。

我有第三个选项卡“主”,我希望这两个选项卡中的数据相互附加显示。第 1 行将有标题,这对于所有 3 张工作表都是相同的。

我写了一个宏,但它只是复制标题而不是数据。

Dim Sht As Worksheet
For Each Sht In ActiveWorkbook.Worksheets
    If Sht.Name = "Employee Access Arranged" Or Sht.Name = "IERWAA Lookup
    Arranged" Then
    Sht.Select

    LastRow = Range("A6553").End(xlUp).Row
    Range("A2", Cells(LastRow, "J")).Copy
    Sheets("Master").Select
    Range("A6553").End(xlUp).Offset(1, 0).Select
    ActiveSheet.Paste

Else
End If
Next Sh

有人可以帮助我如何从两个工作表而不是标题中复制数据。此外,由于行数发生变化,我希望它是动态的以自动拾取最后填充的行。

请注意:这不是另一个问题的重复。我不想只匹配两张纸上的值,而是两张纸上的所有值。此外,这个问题是独一无二的,因为在大多数情况下,最后一列“J”可能没有值,但仍需要复制整列

提前谢谢你。

【问题讨论】:

  • 我无法重现 - 您从空中获取 LastRow 值的列是吗?
  • 咳咳,你有超过 6553 行的数据吗?
  • 不,我没有超过 6553 行数据。但是由于行数如此之多而不是实际数量,因此处理时间会更长,不是吗? dwirony-yes 最后一列在某些情况下可以为空,因为它更像是一个 cmets 列。
  • 但由于行数如此之多而不是实际数量,因此需要更长的时间来处理,不是吗? - 不是。请改用"A" & Rows.Count。您所做的只是获取一个单元格的Range 对象,然后在其上调用.End(xlUp)。这个数字没有任何区别,除了 LastRow 是否正确或没有给出任意数量的行。
  • 不要做sht.Select。不要使用隐式的ActiveSheet 引用(例如RangeCells),而是使用sht 变量限定它们并执行sht.Rangesht.Cells。而不是Range(...).Select,然后是ActiveSheet.Paste,而是sht.Range(...).Paste。避免使用SelectActivate,并使用显式Worksheet 对象限定所有工作表成员调用。

标签: vba excel append


【解决方案1】:

我头顶的脏话:

dim i as long, lrs as long, lrd as long
for i = 1 to sheets.count
    if not sheets.name="Master" then 
        with sheets(i)
            lrs = .cells(.rows.count,1).end(xlup).row
            .range(.cells(2,"A"),.cells(lrs,"J")).copy
        end with
        with sheets("Master")
            lrd = .cells(.rows.count,1).end(xlup).row
            .cells(lrd+1,1).paste
        end with
    end if
next i

编辑1:

清理代码以适用于两个指定的工作表:

Dim i As Worksheet, arr As Variant, lrs As Long, lrd As Long
arr = Array("Employee Access Arranged", "IERWAA Lookup Arranged")
For Each i In Sheets(arr)
    With i
        lrs = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range(.Cells(2, "A"), .Cells(lrs, "J")).Copy
    End With
    With Sheets("Master")
        lrd = .Cells(.Rows.Count, 1).End(xlUp).Row
        .Range(.Cells(lrd + 1, "A"), .Cells(lrd + 1 + lrs, "J")).PasteSpecial xlValues
    End With
Next i

【讨论】:

  • 你的意思是With worksheets(i),对吧? (非活动表)
  • 感谢您的意见西里尔。 excel 文件有多个其他选项卡,这些选项卡与使用此宏的目的无关。如果我使用您的代码,它也会添加其他选项卡中的所有数据。
  • @chrisneilsen 很好。我专注于显示 2x 最后一行声明并错过了它。将编辑。
  • 嘿!奇迹般有效。我试图编写一个数组,但错误地定义了范围。你做得很完美!我已为您的解决方案投票,但是,由于我没有足够的声望点,因此没有显示。谢谢大家! PS。我不知道如何让我的问题的负面声誉消失。
  • @SalikGilani 您应该能够点击投票下方的复选标记以接受答案,即使您无法投票,无论作为问题所有者的声誉如何。大多数人在最初的帖子中没有足够的信息时投反对票,并且如果他们稍后不回来审查(或不发表评论以便他们可以收到更新通知),它通常会保留。是的,-1 感觉很糟糕,但这不是值得关注的问题。很高兴这对你有用!
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-08
  • 2018-03-23
  • 2017-04-19
  • 1970-01-01
相关资源
最近更新 更多