单元格值更改时,将单元格值更改所在的列复制到相同范围的另一张工作表

时间:2019-06-05 09:52:19

标签: excel vba excel-2010

例如,如果仅在A:A范围内更改单元格A8,则复制D4:D8并将其作为值粘贴到工作表“ ADP”中的同一位置,即D4:D8。

为此,我尝试了以下宏

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.range = "A:A" Then
        Call copy_paste_as_value
    End If
End Sub


Sub copy_paste_as_value()
    Range("d4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy

    Sheets("ADP").Activate
    Range("B4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("C4").Select
    Application.CutCopyMode = False
End Sub

我只想复制单元格值发生变化的数据,但是它将整个表复制到另一张纸上。

对我来说,主要问题是弄清楚哪个单元格发生了更改,并仅从哪个单元格值发生更改复制该列中的数据。

在这里,要注意的是,只有在范围A:A中有变化,并且不需要复制粘贴以外的任何其他单元中的变化时,才应该复制数据。

将提供任何帮助。 谢谢。

2 个答案:

答案 0 :(得分:2)

假设相对范围是一致的,请尝试

Private Sub Worksheet_Change(ByVal Target As Range)

Dim r As Range

If Target.Column = 1 And Target.Row > 4 Then
    Set r = Target.Offset(-4, 3).Resize(5)
    Worksheets("ADP").Range(r.Address).Value = r.Value
End If

End Sub

答案 1 :(得分:1)

您可以尝试:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim wsSou As Worksheet, wsDes As Worksheet

    'Set the worksheets to avoid conflicts
    Set wsSou = Target.Worksheet
    Set wsDes = ThisWorkbook.Worksheets("ADP")

    If Not Intersect(Target, Range("A:A")) Is Nothing And Target.Count = 1 Then

        wsDes.Range(wsDes.Cells(Target.Row, 4), wsDes.Cells(Target.Row, 9)).Value = wsSou.Range(wsSou.Cells(Target.Row, 4), wsSou.Cells(Target.Row, 9)).Value

    End If

End Sub