根据条件

时间:2016-09-30 04:30:00

标签: excel vba excel-vba

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

表1:我有一个从单元格A1开始到G29的表格。单元格B2具有日期,该日期已使用Excel中的TODAY选项进行编码。

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

目前,我已设法将所有内容复制并粘贴到工作表2中,然后激活我桌子下方的单元格,以便第二天复制并粘贴。

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

我想要做的是告诉我的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 :(得分: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