筛选并复制多个Excel表中的某些行到另一个

筛选并复制多个Excel表中的某些行到另一个

问题描述:

我正在使用具有各种工作表的工作簿。我想要复制最后5张在其“J”列中值为“Pending”的所有行。我想创建一个名为“Pending week”的新标签,并将所有这些行粘贴在那里。任何帮助将非常感激。 感谢筛选并复制多个Excel表中的某些行到另一个

+1

到目前为止您尝试过什么? – newacc2240

+0

另外,它总是最后5张?如果用户重新安排工作表或添加/删除工作表,会发生什么情况? – QHarr

+0

它总是最后5张@QHarr –

您可以非常轻松地自己创建这个,如果你只是把它分解:

  • 添加新表
  • 名称将片材挂起周
  • 找到五张最新。
  • 创建某种循环的副本,如果细胞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是区分大小写的,所以请记住。

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

+0

OP刚刚添加了一张纸,所以最后5张会包含他们正在粘贴的纸张而不是它?也许在添加表单部分中指定条件之前? – QHarr

+0

这是一个很好的观点,但它似乎并没有像这样工作。 'Worksheets.Add'在工作簿的最左边添加工作表。所以它不应该影响其他代码。为了确保这一点,我们可以使用'Before:= Worksheets(1)'。 – EliasWick

+0

你好@EliasWick我想感谢你的答案。这是很好解释。首先,我想从最后5张纸张中取出值,即只将纸张放在最右边。当我尝试运行你的代码时,我达到了Do while循环,它跳过条件并直接进入下一张表单。你可以模拟一次,如有必要纠正它。 –