excel vba 如何求一列单元格的和 并将值保存在最后一个单元格中,以实现纵向自动求和?

比如 点1 2 3 4 增加了一个点 依然要实现自动求和
利用循环

楼主的描述不是很清晰,也就大致写了一个简单的VBA程序代码,望笑纳。

(1)程序代码如下:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim i1, i2, i3, i4
On Error Resume Next         '忽略运行过程中可能出现的错误
Application.EnableEvents = False    '开启代码只执行一次
Set mysheet1 = ThisWorkbook.Worksheets("Sheet1")

If Target.Row > 2 And Target.Row < 7 And Target.Column = 1 Then '如果是选择A列第3-6行,则

 If mysheet1.Cells(8, 2) = "" Then  '如果单元格是空白,则先求和
  mysheet1.Cells(8, 2) = Application.WorksheetFunction.Sum(mysheet1.Range("B3:B7"))
 End If
 If mysheet1.Cells(8, 3) = "" Then
  mysheet1.Cells(8, 3) = Application.WorksheetFunction.Sum(mysheet1.Range("C3:C7"))
 End If
  mysheet1.Cells(8, 2) = mysheet1.Cells(8, 2) + mysheet1.Cells(Target.Row, 2) '再累积相应的值
  mysheet1.Cells(8, 3) = mysheet1.Cells(8, 3) + mysheet1.Cells(Target.Row, 3)
End If

Application.EnableEvents = True    '恢复代码只执行一次

End Sub

(2)如果选择数字1、2、3、4,当求和(结果)的单元格是空白,则先进行求和,再与响应的单元格相加。

追问

恩 老师说要用循环结构 因为工程过程中 难免会有新的点插入 所以要求在插入点后 即插入行后仍然可以使用自动求和 并保存在列最后一个单元格中

追答

楼主的问题,其实没有必要使用到循环结构(如:一个个单元格去相加,这无意中将会增加程序的复杂程度,降低运算速度),直接引用现成的SUM函数,以及更改其求和范围即可。

追问

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-16

    选中起点A、B右边列对应的区域,

    按组合键ctrl+F3调出”的窗口点选新建,

    在名称栏输入你想要的名称,如“ABC”,点确定。

    在图中求和右边单元格输入公式:=sum(ABC)

    其他求和同理。

本回答被提问者和网友采纳
第2个回答  2019-04-15
Sub 宏1()
Dim r, i%, c, m
c = Cells(2, Columns.Count).End(xlToLeft).Column
r = Range("A" & Rows.Count).End(xlUp).Row
m = Range("A2:A" & r).Find(What:="终点B", SearchDirection:=xlPrevious).Row + 1
Cells(m, 1) = "求和"
For i = 2 To c
Cells(m, i) = Application.Sum(Range(Cells(2, i), Cells(m - 1, i)))
Next
End Sub

追问

你好 可以注解一下么 我是新手小白 很多不懂 谢谢了

第3个回答  2019-04-16
意思:
点名,会增加,比如现在是1-4,插入1行为5后,自动求和,写在最后1个单元格?追问

对的

追答

实际用INDIRECT函数就可以

Sub 求和()
For K = 2 To 3
   X = Range("A:A").Find("求和").Row
   Cells(X, K) = WorksheetFunction.Sum(Range(Cells(3, K), Cells(X - 1, K)))
   Next
End Sub

第4个回答  2019-04-16
哪用vba,选中最后一个格子按alt+=,搞定。