如果列范围中的日期介于用户决定的两个日期之间,则将行复制到新工作表

时间:2017-08-24 16:05:08

标签: excel vba excel-vba

我被卡住了! 我需要在"原始数据"的C列中循环。直到最后一行,如果日期值在开始日期和结束日期之间,则将该行复制到新工作表"周"。日期由输入框

定义
inizio = InputBox("Data Inizio") 'start date
fine = InputBox("Data Fine") 'end date

然后  我存储了"周"的最后一行。从谷歌搜索中借用这个公式的表格(向作者道歉,但我不记得他/她的名字)

PriRigVuot = Worksheets("Week").Cells.Find(What:="*", _
                After:=Range("A1"), _
                LookAt:=xlPart, _
                LookIn:=xlValues, _
                SearchOrder:=xlByRows, _
                SearchDirection:=xlPrevious, _
                MatchCase:=False).Row

然后在尝试复制与If语句

匹配的行时遇到问题
For Each cella In Range("c1:c50")
  If Worksheets("Raw Data").Range(cella).Value >= inizio And Worksheets("Raw Data").Range(cella).Value <= fine Then
    Worksheets("Raw Data").Range(cella).EntireRow.Copy _
    Destination:=Worksheets("Week 34").Range("A" & PriRigVuot + 1)
    Else        
    End If
Next Cella

我知道这段代码(如果它可以工作的话)会一遍又一遍地复制同一个地方的行,但我试图一次解决一个步骤

感谢您提前提供任何帮助

1 个答案:

答案 0 :(得分:0)

首先,您可以存储工作表Week中使用的最后一行,如下所示:

LastRow = ThisWorkbook.Sheets("Week").Range("A" & Rows.Count).End(xlUp).Row

For循环中,您不需要再次指定整个对象,因为在您编写句子时已经指定了Range。所以,代码将是这样的:

Dim sh As Worksheet 
Dim LastRow As Long

Set sh = ThisWorkbook.Sheets("Raw Data")
LastRow = ThisWorkbook.Sheets("Week 34").Range("A" & Rows.Count).End(xlUp).Row

For Each cella In sh.Range("C1:C" & sh.Range("C" & Rows.Count).End(xlUp).Row) 'Dynamic range in column C
    If cella >= inizio And cella <= fine Then
        cella.EntireRow.Copy Destination:=Worksheets("Week 34").Range("A" & LastRow + 1)      
    End If
Next cella