比较两个单元格,如果相等则删除并替换

时间:2016-01-07 07:23:38

标签: excel vba excel-vba

我将数据从一个工作簿发送到另一个工作簿。我的宏将数据复制并粘贴到存储我所有数据的masterdata文档中。粘贴后,宏返回并将所有值设置为0,然后保存然后关闭。

sub send()

Workbooks.Open "C:\Users\BB"
Worksheets("CC").Activate

Workbooks("AA").Activate

Worksheets("AA").Range("A3:F19").Copy

Workbooks("BB").Activate

ActiveSheet.Paste Destination:=Worksheets("CC").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)

ActiveWorkbook.Save
ActiveWorkbook.Close

Workbooks("AA").Activate

Range("C3:E19").Value = 0

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

我需要代码来检查masterdata工作簿中F列的最后一行中的日期是否等于当月的日期和年份。

如果相等,请删除具有此日期的所有内容并替换为新数据。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用datediff函数,如:

 ' Index run through a column
 For Index = 3 To 19
      If DateDiff(Now, ActiveSheet.Cells(Index, 5)) = 0 Then
         ' Replace here your new data
      End If
 Next

答案 1 :(得分:0)

我会删除我的“第一个答案”,但这是我真正的测试答案:

Sub Send() 'asuming that this Sub is located in the "OriData"-Workbook
    Dim OriData As Workbook
    Set OriData = ThisWorkbook

    Dim MasterData As Workbook
    Set MasterData = Workbooks.Open("C:\Users\BB")

    Dim ODSht As Worksheet
    ODSht = OriData.Sheets("AA")


    Dim MDSht As Worksheet
    MDSht = MasterData.Sheets("CC")

    Dim LastRow As Long
    LastRow = MDSht.Cells(MDSht.Rows.Count, "a").End(xlUp).Row  'Last Row in Masterdata which contains data in Column a

    Dim NewDate As Date
    NewDate = MDSht.Cells(LastRow, 6)   'Last row, column F

    If month(Date) = month(NewDate.Value) And Year(Date) = Year(NewDate.Value) Then

也许你必须在NewDate之后删除.Value(你必须尝试)。

由于我不确定你想要删除的是什么,我会编写代码,将masterdata中的整行删除,而在F栏中,日期(月份和年份)对应于“今天”的日期:

        MDSht.Row(LastRow).Delete

如果您想要删除的不仅仅是一行,您必须相应地更改代码,但这可能对您有所帮助。

    End If

    MasterData.Save
    MasterData.Close

为什么在你的代码中你正在复制的范围(A3:F19)和你设置为0的范围(C3:E19)不一样?

    OriData.Activate
    ODSht.Range("A3:F19").Value = 0

    OriData.Save
    OriData.Close
End Sub

如果您使用LastRow和NewDate创建一个函数,您可以使用新数据循环它,以便每次都能控制而不会出现进一步的复杂情况:

Function LastRow(WS As Worksheet)
    LastRow = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row
End Function

Function NewDate(Sht As Worksheet, R As Long)
    NewDate = Sht.Cells(R, 6).Value
End Function

遵循之前的If-Condition:

For DRow = 1 To LastRow(MDSht)
    If (month(Date) = month(NewDate(MDSht, DRow))) And (Year(Date) = Year(NewDate(MDSht, DRow))) Then
        MDSht.Row(DRow).Delete
    ElseIf DRow = LastRow(MDSht)
        MsgBox "Finished", vbokOnly
        Exit Sub
    End If
Next DRow

告诉我,如果它有用,什么没有(我很有兴趣知道,我可以从中学到更多),谢谢:)