ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的测验 > Excel VBA > 快速向下求和(VBA题目)

快速向下求和(VBA题目)

作者:绿色风 分类: 时间:2022-08-18 浏览:300
楼主
罗刚君
Excel自带一个快速求和功能,快捷键为“Alt+=”。
但它只能向上求和,现要求如下:
1.实现向下求和,即与“Alt+=“功能相近,但方向相反
2.需要用快捷键为“Alt+Z”来执行
3.可以选择一个单元格后向下求和,也可以在选择不连续的多单元格格后仍然快速向下求和
4.求和时,需要选择公式中的区域地址。例如公式是“=SUM("A12:A25")”,那么必须选中A12:A25。方便用户随意修改引用区域。样式见下图

 
5.要和防错功能,即不管用户操作是否规范,都不能有错误提示框。例如选择非单元格后执行,或者选择A65536后执行。
具体请看动画

 
第一个回答者
特奖励我正在淘宝店出售的着色工具5.0软件一套
2楼
棉花糖

  1. Sub sumdown()
  2.     Dim cell As Range, Rng As Range
  3.     On Error Resume Next
  4.         Set Rng = Intersect(Selection.SpecialCells(xlCellTypeBlanks), UsedRange)
  5.     If Err <> 0 Then Exit Sub
  6.     If Rng Is Nothing Then Exit Sub
  7.     For Each cell In Selection.SpecialCells(xlCellTypeBlanks)
  8.         cell.Formula = "=sum(" & Range(cell.Offset(1, 0).Address, cell.Offset(1, 0).End(xlDown).Address).Address(0, 0) & ")"
  9.     Next cell
  10.     Application.SendKeys "{F2}"
  11. End Sub
快捷键没弄。
3楼
罗刚君
离要求还有很大差距
4楼
hlxz
这个cell In Selection.SpecialCells(xlCellTypeBlanks)意思

是 取得当前第n个空行向下的第1个单元格地址→》cell.Offset(1, 0).Address
是 取得当前第n个空行向下的非空的最后1个单元格-地址--》cell.Offset(1, 0).Address

所以用在  快速向下求和  这个不是很恰当
5楼
biaotiger1
水平有限,只能做到这个程度了。不知道能否满足要求


工作表中代码如下
  1. Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  2. Application.OnKey "%z", "aaa"
  3. End Sub
模块中代码如下

  1. Sub aaa()
  2. 'MsgBox "aaa"
  3. Dim I As Integer, Rng As Range, Rng1 As Range
  4. On Error Resume Next
  5. 'Debug.Print Selection.Address
  6. 'If Error.num > 0 Then End
  7. For Each Rng1 In Selection
  8.     If Len(Rng1.Offset(1, 0)) = 0 Then GoTo 1
  9.     If Application.CountA(Range(Rng1.Offset(1, 0), Cells(Rows.Count, Rng1.Column))) = 0 Then End
  10.    
  11.     Set Rng = Intersect(Rng1.Offset(1, 0).CurrentRegion, Range(Cells(1, Rng1.Column), Cells(Rows.Count, Rng1.Column)))
  12.     Rng1.Formula = "=SUM(" & Rng.Address(0, 0) & ")"
  13. 1:
  14. Next
  15. For Each Rng1 In Selection
  16.     If Len(Rng1) <> 0 Then Rng1.Activate: Exit For
  17. Next
  18. Application.SendKeys "{F2}{LEFT}+{HOME}+{RIGHT 5}"
  19. End Sub



  1. 有多个问题,楼下继续→-罗刚君

快速向下求和.rar
6楼
biaotiger1
再加一句清除内容的代码Selection.ClearContents

  1. Sub aaa()
  2. Dim I As Integer, Rng As Range, Rng1 As Range
  3. On Error Resume Next
  4. Selection.ClearContents
  5. For Each Rng1 In Selection
  6.     If Len(Rng1.Offset(1, 0)) = 0 Then GoTo 1
  7.     If Application.CountA(Range(Rng1.Offset(1, 0), Cells(Rows.Count, Rng1.Column))) = 0 Then End
  8.    
  9.     Set Rng = Intersect(Rng1.Offset(1, 0).CurrentRegion, Range(Cells(1, Rng1.Column), Cells(Rows.Count, Rng1.Column)))
  10.     Rng1.Formula = "=SUM(" & Rng.Address(0, 0) & ")"
  11. 1:
  12. Next
  13. For Each Rng1 In Selection
  14.     If Len(Rng1) <> 0 Then Rng1.Activate: Exit For
  15. Next
  16. Application.SendKeys "{F2}{LEFT}+{HOME}+{RIGHT 5}"
  17. End Sub

7楼
皮皮1998
向下求和1.rar
题目到目前为止,还是觉得有疑问
8楼
皮皮1998
呵呵
9楼
biaotiger1
更改了多列数据时选择单列求和的代码
多个空白单元格?不明白什么意思,不计算,保持选中状态。这样可以吗 ?


快速向下求和.rar
机器码.rar

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap