如何在excel上输入基值和覆盖值

时间:2018-03-06 16:20:47

标签: excel excel-vba vba

让我用一个例子解释一下。

我从网站上提取销售数据并对其进行计算,因此我会有两列:

Sales Company A | 15000 (from the website)
Sales Company B | 24000 (from the website)
-----------------------
Total           | sum()

我希望能够覆盖销售额,以便影响总销售额,但不会失去原始价值。因此,例如,我可以在我的手机上手动更改公司A销售,点击输入并获得新的总计。如果我犯了一个错误,我可以删除公司A销售,它将回到原来的15000(不需要再次检索数据,我希望)。

这在excel上可行吗?或者是一个插件还是允许它的东西?

1 个答案:

答案 0 :(得分:0)

好的,所以似乎没有简单的方法可以编码。所以这里是我在vba上的代码,它的工作方式: 1)创建一个名为Original的工作表,其中包含原始数据。 2)复制/复制工作表并将其称为可编辑,其中包含您要覆盖或不覆盖的可编辑数据。

以下代码适用于如果您在C1处修改单元格,它将复制两个完整范围的样式和公式,从原始到可编辑。然后,如果您修改任何其他单元格,它会将该单元格变为蓝色,因为您修改了它。如果删除单元格,它将从原始公式单元格中恢复该值。

我希望这可以帮助其他人,代码非常简单,易于修改。我只是希望有一些其他更好的方法,而不需要复制在我的情况下非常大的工作表。


    Private Sub Worksheet_Change(ByVal target As Range)
    Application.ScreenUpdating = False
    ' if C1 is modified, copy most of the data from Original to Editable
    If target.Column = 3 And target.Row = 1 Then
        sbCopyRangeToAnotherSheet
    Else
        If IsEmpty(target.Value) Then ' if we delete this cell, copy it from Original to Editable
            Sheets("Original").Cells(target.Column, target.Row).Copy Destination:=Sheets("Editable").Cells(target.Column, target.Row)
         Else
            If Not target.Cells.HasFormula Then ' if the copied cell is not formula, it means it's modified value so change its color
                target.Cells.Interior.ColorIndex = 42 ' change cell color since you have edited manually this cell
            End If
        End If
    End If
    Application.ScreenUpdating = True
    End Sub

    'In this example I am Copying the Data from Original to Editable sheets
    Sub sbCopyRangeToAnotherSheet()
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    ' copy the required data
    Sheets("Original").Range("L3:V13").Copy Destination:=Sheets("Editable").Range("L3")
    Sheets("Original").Range("A50:AM172").Copy Destination:=Sheets("Editable").Range("A50")
    'CopyCharts "Editable"
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    End Sub