在每次迭代中以excel记录数据

时间:2017-02-07 16:43:46

标签: excel excel-vba vba

我迫切需要解决我长期悬而未决的问题,如下所示。

基于可在我的工作表中设置的少数单元格中完成的可编辑选择,单元格C28到F28会根据选择不断计算答案。每次我对可编辑选择进行更改时,这些单元格(C28到F28)中的值都会发生变化。我想保留最后一个的记录。在每次进行最后一次更改之前,在这些单元格中。然后我需要显示之前的nos之间的关系(以%表示)。和没有。目前的变化很容易。

我最好不要使用VBA这样做,因为我之前从未使用它,因此不舒服。但如果VBA是解决这个问题的唯一解决方案,那么就这样吧! 如果这样做,这个工作表需要发送给许多用户,所以,无论什么诀窍 - 一旦文件被邮寄,需要为任何用户工作。

谢谢,

1 个答案:

答案 0 :(得分:0)

这不是VBA的回答:

在进行更改之前,您需要复制范围(C28至F28)并仅在纸张的某些部分粘贴特殊值。

您将获得所有计算的记录。

使用VBA解决方案编辑:

如果我理解正确,你就像照片一样:

That will do code under this picture

<强> 1。你需要进入Visual Basic编辑器(Alt + F11)(你会得到这样的东西):

enter image description here

<强> 2。您需要双击要执行此代码的工作表名称

enter image description here

第3。复制此代码并将其粘贴到右侧窗口中,如下所示:

enter image description here

<强> CODE:

Dim valueOfC28 As Long
Dim valueOfD28 As Long
Dim valueOfE28 As Long
Dim valueOfF28 As Long

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.AddressLocal = Range("C23").AddressLocal Then
    Range("C29").Value = valueOfC28
End If
If Target.AddressLocal = Range("D23").AddressLocal Then
    Range("D29").Value = valueOfD28
End If
If Target.AddressLocal = Range("E23").AddressLocal Then
    Range("E29").Value = valueOfE28
End If
If Target.AddressLocal = Range("F23").AddressLocal Then
    Range("F29").Value = valueOfF28
End If


End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.AddressLocal = Range("C23").AddressLocal Then
    valueOfC28 = Range("C28").Value
End If
If Target.AddressLocal = Range("D23").AddressLocal Then
    valueOfD28 = Range("D28").Value
End If
If Target.AddressLocal = Range("E23").AddressLocal Then
    valueOfE28 = Range("E28").Value
End If
If Target.AddressLocal = Range("F23").AddressLocal Then
    valueOfF28 = Range("F28").Value
End If
End Sub

我希望它会有所帮助!

编辑您需要的收藏:

用现有代码替换此代码:

Dim valueOfC28 As Long
Dim valueOfD28 As Long
Dim valueOfE28 As Long
Dim valueOfF28 As Long

Private Sub Worksheet_Change(ByVal Target As Range)
Dim inc As Integer
Dim flag As Boolean
Dim OLDvalueOfC29 As Long
Dim OLDvalueOfD29 As Long
Dim OLDvalueOfE29 As Long
Dim OLDvalueOfF29 As Long
Dim SheetName As String
flag = False
OLDvalueOfC29 = Range("C29").Value
OLDvalueOfD29 = Range("D29").Value
OLDvalueOfE29 = Range("E29").Value
OLDvalueOfF29 = Range("F29").Value
If Target.AddressLocal = Range("C23").AddressLocal Then
    flag = True
    Range("C29").Value = valueOfC28
End If
If Target.AddressLocal = Range("D23").AddressLocal Then
    flag = True
    Range("D29").Value = valueOfD28
End If
If Target.AddressLocal = Range("E23").AddressLocal Then
    flag = True
    Range("E29").Value = valueOfE28
End If
If Target.AddressLocal = Range("F23").AddressLocal Then
    flag = True
    Range("F29").Value = valueOfF28
End If
If Target.AddressLocal = Range("C23:F23").AddressLocal Then
    flag = True
    Range("C29").Value = valueOfC28
    Range("D29").Value = valueOfD28
    Range("E29").Value = valueOfE28
    Range("F29").Value = valueOfF28
End If

If flag = True Then
    inc = 1
    Do While Range("K" & inc).Value <> ""
        inc = inc + 1
    Loop
    Range("K" & inc) = OLDvalueOfC29
    Range("L" & inc) = OLDvalueOfD29
    Range("M" & inc) = OLDvalueOfE29
    Range("N" & inc) = OLDvalueOfF29
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.AddressLocal = Range("C23").AddressLocal Then
    valueOfC28 = Range("C28").Value
End If
If Target.AddressLocal = Range("D23").AddressLocal Then
    valueOfD28 = Range("D28").Value
End If
If Target.AddressLocal = Range("E23").AddressLocal Then
    valueOfE28 = Range("E28").Value
End If
If Target.AddressLocal = Range("F23").AddressLocal Then
    valueOfF28 = Range("F28").Value
End If

If Target.AddressLocal = Range("C23:F23").AddressLocal Then
    valueOfC28 = Range("C28").Value
    valueOfD28 = Range("D28").Value
    valueOfE28 = Range("E28").Value
    valueOfF28 = Range("F28").Value
End If
End Sub