Excel宏将两个单元格添加到其中一个

时间:2017-09-04 11:16:08

标签: excel vba excel-vba

我是宏观新手,需要一些帮助。

两列是“O”和“P”。用户将数字写入O2并单击双击(或按下按钮)后,宏必须将O2和P2一起添加并在P2中显示结果。问题是它应该适用于O3-P3,O4-P-4直到O1-P1。

有人可以帮忙吗? 如果在双击(或按钮)后在O2中删除了值,那就太棒了。

2 个答案:

答案 0 :(得分:0)

看,通常你必须做一些代码然后你要求输入什么不起作用/你想要实现什么。要求免费代码并不是很酷。

话虽这么说,现在这里的工作有点慢,但这并不难。

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range(Cells(2, 16), Cells(Cells(Rows.Count, 16).End(xlUp).Row, 16))) Is Nothing Then
         Selection.Value = Selection.Value + Cells(Selection.Row, 15).Value
         Cells(Selection.Row, 15).Value = vbNullString
    End If
End Sub

您必须将此代码放在要双击的工作表上。如果您不知道如何操作,请按ALT+F11进行操作。然后,在左侧,您单击工作表(在我的情况下Plan1。它可能会根据您的Excel的语言而有所不同。这是参考图像 Reference image

因此,在您执行此操作后,您将代码粘贴在右侧,它将起作用。但它是如何运作的?

第一行Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)定义代码何时执行。正如你所问,它是双击。如果您想更改触发器(例如,在按钮中),则需要更改。

第二行检查有效的操作范围。它会检查Range是否介于Cells(2,16)之间 ,表示Cell at Row 2 and Column 16 AKA P2Cells(Cells(Rows.Count, 16).End(xlUp).Row, 16)。第二部分很奇怪,因为你提到了#34;永远地去了#34;。所以,不是像第一部分第2行那样说一个特定的行,而是现在检查哪一列是列16的最后一行。获取最后一行的具体行是Cells(Rows.Count, 16).End(xlUp).Row,基本上意味着这部分范围是Cell at last row and Column 16,AKA P..something

从现在开始我们的行动范围,我们需要做出你想要的,对吧?将它们加在一起。哪一行是第3行。Selection.Value返回您通过第一次单击选择的单元格的值。请记住,只有当它在第2行定义的范围内时才会起作用。 由于您具有该值,因此您说Selection.Value = Selection.Value + Cells(Selection.Row, 15).Value,因此它将值设置为自身+第15列(Selection.Row)处同一行(Column "O")的单元格。 之后,它会将Column "O"的值设置为空vbNullString。如果需要,可以将其替换为0,这样也可以。

就是这样。在请求代码之前,我只是请求一些研究和一些尝试。卡住可以。可以不知道如何做事。不要害怕寻求帮助。只需在下次显示一些代码。

答案 1 :(得分:0)

下面列出的解决方案应用简化逻辑:当用户在列O中的任何单元格中输入值时,此代码将更新列P(例如P3.Value = O3.Value + P3.Value),然后清除内容列O中的单元格(本例中为O3)

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Column = 15 Then
        Range("P" & Target.Row).Value = Target.Value + Range("P" & Target.Row).Value
        Application.EnableEvents = False
        Target.Value = ""
        Application.EnableEvents = True
    End If
End Sub

在这种情况下,您不需要任何按钮或double_click事件处理程序。希望这可能会有所帮助