如果单元格值发生变化,则仅将单元格值发生变化的那一列复制到另一个工作表中,但要复制两个表中的公共值

时间:2019-05-23 00:12:18

标签: excel vba excel-formula excel-2010

我确实有Excel表格,其中插入了IF公式,

=IF(C23='Data Nifty'!$AD$2,"CMP"," ")

在另一种情况下使用上述错误衍生的“ CMP”

=IF(A23="CMP",VLOOKUP($D$3,'Data Nifty'!$N:$Y,7,FALSE)," ")

现在的问题是,如果CMP在其他列中发生更改,那么从提到错误CMP的原始值进行分配时,我要确保一旦CMP出现,值就不会更改。

我尝试使用vba代码,如果值发生更改,则将数据复制到另一个工作表中,但是没有用。

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("A4").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.Copy
    Range("B4").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("C4").Select
    Application.CutCopyMode = False
End Sub

THIS IS HOW "CMP" IS DERIVED

THIS IS HOW DERIVIED CMP IMPACTS ON OTHER CELL'S VALUE

当前问题:-当cmp从一种价格变为另一种价格时,错误CMP前面提到的值变为0,并且新值出现在新的cmp上

(我的目标:-如果出现“ CMP”,则该值前面的值(在上图中即26,55,110.35,117,29.35,9)应保持原样,并且新值也应出现在新cmp的前面,因此,简而言之,一旦派生CMP,所有值都应保持不变)

希望如此,我已将查询解释为可以理解的水平。

任何帮助都将由衷地奉献。

1 个答案:

答案 0 :(得分:1)

这应该可以解决您的问题,请尝试以下代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then copy_paste_as_value
End Sub

Sub copy_paste_as_value()
    With ActiveSheet
        .Range(.Cells(4,1),Cells(Rows.Count, 1).End(xlUp)).Copy
        .Range("B4").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    End With
    Application.CutCopyMode = False
End Sub