首页 文章

通过根据条件覆盖另一个工作表中的单元格来复制单元格和粘贴

提问于
浏览
-1

VBA初学者在这里 . 我正在尝试根据日期创建VBA代码 . 这是我的信息:

表1:我有一个表格从A1开始,然后是G29 . Cell B2具有日期,该日期已使用Excel中的TODAY选项进行编码 .

现在这个表必须每天更新,但是一天结束后,我想保存该表的内容并在第二天清除Sheet 1 . 我想将它全部保存在隐藏的工作表中,第2页 .

目前,我已经设法将所有内容复制并粘贴到Sheet 2中,然后激活我 table 下方的单元格,以便第二天可以复制和粘贴 .

我遇到的问题是,每次运行我的宏时,它都会将表复制并粘贴到我在Sheet 2中已经得到的单元格中 . 因此对于任何特定日期,我可能会有3,4,5,无论同一张 table 的变化,都是彼此相同的 .

我想要做的是告诉我的VBA代码,如果单元格B2(表1)中的值是x并且表2中相应日期单元格中的值相同,则复制并粘贴这些相同的单元格 .

我知道如何做到最后一点,我想帮助弄清楚(现在)是如何告诉它在两张纸上进行我的特定搜索和激活细胞,记住它需要保持一般性一个日期,工作表2中的下一个日期单元格将位于B2下方约31个单元格,然后是该单元格下方的31个单元格等 .

我希望这是有道理的 . 如果有人有任何问题,请告诉我!

编辑:

这是我目前的宏

Sub Macro1()
'
' Macro1 Macro
'
' Acceso directo: CTRL+h
'
    Range("A1:G29").Select
    Selection.Copy
    Sheets("Hoja2").Select
    Range("A1").Select
    ActiveSheet.Paste
    Range("A1").Select
    ActiveCell.Offset(31, 0).Select

End Sub

这将复制并粘贴并选择下面的单元格 . 但是,我正在努力让Excel根据日期粘贴到特定的单元格上 .

1 回答

  • 0

    您想要检查源表中的日期是否已存在于目标表中 . 如果是这样,请将29行表粘贴到相应的范围内,否则将其粘贴到底部 . 以下应该有效:

    Sub Macro1()
    
    target = Cells("B2")
    Range("A1:G29").Copy
    end = Sheets("Hoja2").Cells(1048576, 2).End(xlUp).row 'check the last filled in row
    tables = end / 29 'counts how many tables are already pasted in the sheet
    for i = 1 to tables
        index = (i-1)*29 + 2 'row index where the date is written
        if Sheets("Hoja2").Cells("B" & index) = target then 'check if the date corresponds
            Sheets("Hoja2").Range("A" & index - 1).Paste
            Range("A" & index).Select
            ActiveCell.Offset(31, 0).Select
            exit sub
        end if
    next i
    'the following lines are skipped if the for loop pastes the table
    Sheets("Hoja2").Range("A" & end + 1).Paste     
    Range("A" & index).Select
    ActiveCell.Offset(31, 0).Select
    
    End Sub
    

相关问题