过滤并将多个Excel工作表中的某些行复制到另一个

时间:2017-10-11 08:50:41

标签: excel vba excel-vba filter

我正在使用具有各种工作表的工作簿。我想复制最后5张中具有值" Pending"的所有行。在他们的专栏" J"。我想创建一个名为" Pending week"并将所有这些行粘贴到那里。任何帮助将非常感激。 谢谢

1 个答案:

答案 0 :(得分:1)

如果你打破它,你可以很容易地创建它:

  • 添加新工作表
  • 将工作表命名为Pending Week
  • 找到最新的五张纸。
  • 如果J列中的单元格包含值"正在等待"
  • ,请创建一种复制粘贴行的循环。

您尚未提供任何代码,因此我将为您提供工作基础:

您添加了新的工作表&使用以下命名:

Worksheets.Add
ActiveSheet.Name = "Pending week"

查找最新的五张

据我所知,您无法找到最新的表格。表格不包含创建它们的日期和时间。但是,如果我们忽略这一点,并期望将最新的五张工作表放在最右边的工作簿中(新创建的工作表的默认位置)。然后你需要弄清楚你有多少张纸并倒数。

您可以使用:Worksheets.Count来计算所有工作表。使用此号码并向后计数。我的第一个想法是使用For Loop

Dim X As Integer
For X = (Worksheets.Count - 4) To Worksheets.Count

Next

X将成为查找我们最新工作表的标识符。所以你应该将它合并到我们的循环中。您希望将循环放在此For Block中。

<强>循环

有很多方法可以在工作表中查找值,但您需要弄清楚工作表的最后一行是什么。没有它,我们就不知道代码何时应该停止。

如果所有J单元格中都有值,则可以使用Do Until循环。然后,您只需将整行插入待定周

即可

看起来像是:

Dim XLrow As Integer
XLrow = 1

Do Until Worksheets(1).Cells(XLrow, "J") = ""

    If Worksheets(1).Cells(XLrow, "J") = "Pending" Then
        Worksheets(1).Range(XLrow & ":" & XLrow) = Worksheets("Pending week").Cells(XLrow, "J").Value
    End If

XLrow = XLrow + 1
Loop

您需要将范围更改为要复制的范围的长度。 注意:Pending值区分大小写,因此请记住这一点。

好的,这就是创建代码所需要的。当然,您需要更改值以适合您自己的工作簿,但这是基础。