Excel VBA将符合条件的值复制到特定单元格

Excel VBA将符合条件的值复制到特定单元格,excel,vba,Excel,Vba,我一直在尝试在excel中建立一个待办事项列表。我决定编写一个宏来检查特定的条件,如果满足,则复制to do项 我是一个VBA初学者,所以我花时间四处搜寻、学习并整理下面的代码。请看一下,并在这些方面提供一些帮助好吗 它复制正确,但我不确定如何使用.End(xlUp)将行更改为粘贴到特定单元格I20,并向下填充每个项目 粘贴时,覆盖单元格中的现有内容(因此,每天单击“更新”按钮,它都会 覆盖前几天) 谢谢你的帮助 Sub today() Dim StartDate As Long Dim E

我一直在尝试在excel中建立一个待办事项列表。我决定编写一个宏来检查特定的条件,如果满足,则复制to do项

我是一个VBA初学者,所以我花时间四处搜寻、学习并整理下面的代码。请看一下,并在这些方面提供一些帮助好吗

  • 它复制正确,但我不确定如何使用
    .End(xlUp)
    将行更改为粘贴到特定单元格I20,并向下填充每个项目
  • 粘贴时,覆盖单元格中的现有内容(因此,每天单击“更新”按钮,它都会 覆盖前几天)
谢谢你的帮助

Sub today()
Dim StartDate As Long
Dim EndDate As Long

StartDate = DateSerial(Year(Date), Month(Date), Day(Date))
EndDate = DateSerial(Year(Date), Month(Date), Day(Date) + 6)

For Row = 1 To 100

    If Worksheets("sheet1").Cells(Row, 6).Value >= StartDate And Worksheets("sheet1").Cells(Row, 6).Value <= EndDate And Worksheets("sheet1").Cells(Row, 4).Value <> "Complete" Then

        Worksheets("sheet1").Cells(Row, 2).Copy

        Worksheets("Sheet1").Cells(Rows.Count, "I").End(xlUp).Offset(1, 0).PasteSpecial

        ActiveSheet.Paste
        Application.CutCopyMode = False
    End If

    Next Row

End Sub
Sub-today()
暗淡的起始日期与长
尽可能长的日期
StartDate=DateSerial(年(日)、月(日)、日(日))
EndDate=DateSerial(年(日)、月(日)、日(日)+6)
对于行=1到100
如果工作表(“sheet1”).单元格(第6行).值>=开始日期,而工作表(“sheet1”).单元格(第6行).值而不是

   Worksheets("sheet1").Cells(Row, 2).Copy

   Worksheets("Sheet1").Cells(Rows.Count, "I").End(xlUp).Offset(1, 0).PasteSpecial

   ActiveSheet.Paste
   Application.CutCopyMode = False
你可以试试

Worksheets("Sheet1").Cells(Rows.count,"I").End(xlup).offset(1,0).value = worksheets("Sheet1").Cells(Row,2).Value
我认为您引用的是正确的单元格(最后一个单元格+1行),但是
ActiveSheet.Paste
把它搞砸了。其次,复制/粘贴比仅获取值要慢

编辑:如果要从I20开始,但I19未填充,则可以先确定行,然后再设置值:

Dim rowNum as Long
rowNum = application.worksheetfunction.max(20,Worksheets("Sheet1").Cells(Rows.count,"I").End(xlup).offset(1,0).Row)
Worksheets("Sheet1").Cells(rowNum,"I").Value = Worksheets("Sheet1").Cells(Row,2).Value
而不是

   Worksheets("sheet1").Cells(Row, 2).Copy

   Worksheets("Sheet1").Cells(Rows.Count, "I").End(xlUp).Offset(1, 0).PasteSpecial

   ActiveSheet.Paste
   Application.CutCopyMode = False
你可以试试

Worksheets("Sheet1").Cells(Rows.count,"I").End(xlup).offset(1,0).value = worksheets("Sheet1").Cells(Row,2).Value
我认为您引用的是正确的单元格(最后一个单元格+1行),但是
ActiveSheet.Paste
把它搞砸了。其次,复制/粘贴比仅获取值要慢

编辑:如果要从I20开始,但I19未填充,则可以先确定行,然后再设置值:

Dim rowNum as Long
rowNum = application.worksheetfunction.max(20,Worksheets("Sheet1").Cells(Rows.count,"I").End(xlup).offset(1,0).Row)
Worksheets("Sheet1").Cells(rowNum,"I").Value = Worksheets("Sheet1").Cells(Row,2).Value

这一变化使其运行更加平滑,但仍然没有显示在I20中。我的理解是,偏移量使它在新行中显示每个项目,因此更改将使偏移量从I20开始,而不是从列的顶部开始。您引用的单元格指向列I+1行中最后一个填充的单元格。I19满了吗?哦,不,没有!我没意识到它看到了最后一个被填满的牢房。那部分现在很好用。是否可以(在不完全更改代码的情况下)在每次运行宏时覆盖行,而不是填充下一个空行?您需要在宏的开头清除列I,然后使用类似以下内容:
Worksheets(“Sheet1”).Range(“I20:I”和Worksheets(“Sheet1”).Cells(rows.count,“I”).end(xlup).row).ClearContents
非常好用,谢谢您的帮助。在Stackoverflow上编辑原始问题并为更新的代码答案添加另一个代码部分是否正常?这种更改使其运行更加顺畅,但仍然不会显示在I20中。我的理解是,偏移量使它在新行中显示每个项目,因此更改将使偏移量从I20开始,而不是从列的顶部开始。您引用的单元格指向列I+1行中最后一个填充的单元格。I19满了吗?哦,不,没有!我没意识到它看到了最后一个被填满的牢房。那部分现在很好用。是否可以(在不完全更改代码的情况下)在每次运行宏时覆盖行,而不是填充下一个空行?您需要在宏的开头清除列I,然后使用类似以下内容:
Worksheets(“Sheet1”).Range(“I20:I”和Worksheets(“Sheet1”).Cells(rows.count,“I”).end(xlup).row).ClearContents
非常好用,谢谢您的帮助。在Stackoverflow上编辑原始问题并为更新的代码答案添加另一个代码部分是否正常?