如果单元格的值发生变化,则只复制该单元格所在列到另一个工作表,但要根据两个工作表中的共同值进行匹配。

3
我有一个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

这就是“CMP”是如何派生出来的

这就是派生CMP对其他单元格数值的影响

当前问题:当CMP从一个价格更改为另一个价格时,在早期CMP之前提到的值变为0,并且新值出现在新CMP的前面。

我的目标:一旦“CMP”出现,它前面提到的值(即上图中的26、55、110.35、117、29.35、9)应该保持不变,新的值也应该出现在新的CMP的前面。因此,总体而言,一旦派生出CMP,所有的值都应该保持不变。

希望我已经清楚地解释了我的问题。

非常感谢您的任何帮助。


你能否将代码粘贴到你的 copy_paste_as_value 模块中? - Mikku
我现在已经添加了那段代码,在我的问题中,为了更清晰明确。谢谢。 - Arshit patel
你可能会从阅读《如何避免在Excel VBA中使用Select》(https://dev59.com/3Ggv5IYBdhLWcg3wSe0f)中受益。 - Pᴇʜ
感谢您的宝贵时间,如果有更简单有效的解决方案,我希望能了解到。谢谢! - Arshit patel
1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接