Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 7510|回复: 19

[已解决]关于用VBA代码写的求和语句

[复制链接]
发表于 2011-7-26 18:00 | 显示全部楼层 |阅读模式
本帖最后由 lcbnyn 于 2011-7-26 20:13 编辑

这是我学了兰版VBA80集的第四集循环后学写的语句,有几个问题未解决:
1、代码放在模块里,为何只对表1起作用?
2、要让代码对同一工作薄中指定的几个工作表同时作用,应加什么语句?
3、能否象公式一样让求和自动运行(也就是不点运行按钮自动求和)。
4、代码能简化吗?还有另外的书写方式吧?

最佳答案
2011-7-26 23:55
lcbnyn 发表于 2011-7-26 18:00
这是我学了兰版VBA80集的第四集循环后学写的语句,有几个问题未解决:
1、代码放在模块里,为何只对表1起作 ...
1、代码放在模块里,为何只对表1起作用?
2、要让代码对同一工作薄中指定的几个工作表同时作用,应加什么语句?
3、能否象公式一样让求和自动运行(也就是不点运行按钮自动求和)。
4、代码能简化吗?还有另外的书写方式吧?

1、因为你这个代码是默认对所激活的表其作用的,如果你是表2在激活的状态中,那么就会对表2起作用。
2、这个可以对所有的表分别进行求和,每张表的求和的结果分别放在各个表的I3单元格里

  1. Sub SumAllSheet()
  2. Dim rng As Range
  3. Dim sht As Worksheet
  4. Dim s As Integer
  5. For Each sht In ThisWorkbook.Sheets
  6.     For Each rng In sht.Range("c3:h6")
  7.         s = s + rng
  8.     Next rng
  9.     sht.Range("i3") = s
  10.     s=0
  11. Next sht
  12. End Sub
复制代码
3、如果想让求和自动运行,可以放在ThisWorkBook的模块里使用Workbook_Open()或者使用Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)这两个过程,其中他们分别表示在工作簿打开的时候,和工作簿的内容发生改变的时候运行相关的代码。
4、另外的书写方式就是按照行循环、列循环的方式进行求和,或者就

  1. Sub SumAllSheet2()
  2. Dim sht As Worksheet

  3. For Each sht In ThisWorkbook.Sheets
  4.     sht.Range("i3") = "=sum(c3:h6)"
  5. Next sht
  6. End Sub
复制代码
直接在对应的表里写上公式就好了。



求和.rar

6.12 KB, 下载次数: 70

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2011-7-26 20:13 | 显示全部楼层
回复

使用道具 举报

发表于 2011-7-26 20:29 | 显示全部楼层
回复 lcbnyn 的帖子
  1. Sub bb()
  2. Dim i As Long
  3. Dim j As Long
  4. Dim s As Integer
  5. For i = 3 To 5
  6. For j = 3 To 8
  7. s = s + Cells(i, j)
  8. Next j
  9. Next i
  10. Range("i3") = s
  11. End Sub
复制代码

回复

使用道具 举报

发表于 2011-7-26 20:41 | 显示全部楼层
回复 lcbnyn 的帖子
  1. Sub cc()
  2. Dim rng As Range
  3. Dim s As Integer
  4. For Each rng In Range("c3:h6")
  5. s = s + rng
  6. Next rng
  7. Range("i3") = s
  8. End Sub
复制代码

回复

使用道具 举报

 楼主| 发表于 2011-7-26 22:26 | 显示全部楼层
楼上的朋友,我试过了:
1、代码少了一个循环体——只加了一行,不过没关系,加上就是了;
2、未能解决我的凝问。
不过还是要谢谢的!
回复

使用道具 举报

 楼主| 发表于 2011-7-26 23:29 | 显示全部楼层
问题不应该太难吧?
回复

使用道具 举报

发表于 2011-7-26 23:47 | 显示全部楼层
lcbnyn 发表于 2011-7-26 22:26
楼上的朋友,我试过了:
1、代码少了一个循环体——只加了一行,不过没关系,加上就是了;
2、未能解决我 ...

4楼的代码是正确的啊,没有少循环体啊。。。
汗死。。
回复

使用道具 举报

发表于 2011-7-26 23:55 | 显示全部楼层    本楼为最佳答案   
lcbnyn 发表于 2011-7-26 18:00
这是我学了兰版VBA80集的第四集循环后学写的语句,有几个问题未解决:
1、代码放在模块里,为何只对表1起作 ...
1、代码放在模块里,为何只对表1起作用?
2、要让代码对同一工作薄中指定的几个工作表同时作用,应加什么语句?
3、能否象公式一样让求和自动运行(也就是不点运行按钮自动求和)。
4、代码能简化吗?还有另外的书写方式吧?

1、因为你这个代码是默认对所激活的表其作用的,如果你是表2在激活的状态中,那么就会对表2起作用。
2、这个可以对所有的表分别进行求和,每张表的求和的结果分别放在各个表的I3单元格里

  1. Sub SumAllSheet()
  2. Dim rng As Range
  3. Dim sht As Worksheet
  4. Dim s As Integer
  5. For Each sht In ThisWorkbook.Sheets
  6.     For Each rng In sht.Range("c3:h6")
  7.         s = s + rng
  8.     Next rng
  9.     sht.Range("i3") = s
  10.     s=0
  11. Next sht
  12. End Sub
复制代码
3、如果想让求和自动运行,可以放在ThisWorkBook的模块里使用Workbook_Open()或者使用Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)这两个过程,其中他们分别表示在工作簿打开的时候,和工作簿的内容发生改变的时候运行相关的代码。
4、另外的书写方式就是按照行循环、列循环的方式进行求和,或者就

  1. Sub SumAllSheet2()
  2. Dim sht As Worksheet

  3. For Each sht In ThisWorkbook.Sheets
  4.     sht.Range("i3") = "=sum(c3:h6)"
  5. Next sht
  6. End Sub
复制代码
直接在对应的表里写上公式就好了。



回复

使用道具 举报

发表于 2011-7-26 23:59 | 显示全部楼层
  1. Sub lxqh()
  2. Dim x As Long, y As Long, sh As Long
  3. For sh = 1 To Sheets.Count
  4.     With Sheets(sh)
  5.         For x = 3 To 70
  6.             y = .Cells(x, 3) + .Cells(x, 4) + .Cells(x, 5) + .Cells(x, 6) + .Cells(x, 7) + .Cells(x, 8)
  7.             .Cells(x, 9) = y
  8.         Next x
  9.     End With
  10. Next sh
  11. End Sub
复制代码
这个是将就你自己的原代码进行添加的
首先给你提几点建议:
1、书写代码要规范,要有层次感(方便检查)可以按Tab向右缩进,Shift+Tab向左缩进
2、定义变量的时候,一定要给变量定义类型,除非它是不定类型的
3、最好加注释,方便以后修改

好了现在开始说代码吧:
你说的是只对sheet1起作用,那是因为你当前激活的工作表是sheet1,并且在代码中没有指定那个工作表,所以只是对sheet1起作用,如果在cells前面加上工作表名称比如sheets("sheet2").cells()那么就算你激活的是sheet1它也只是对sheet2表起作用。
如果你想全部表都起作用的话,那么就做个循环,就像3、4、9、10行代码。不过第6、7行代码中的cells()的前面就需要加个点 “.”
这个是with object……end with的用法
至于精简代码,可以参考4楼,使用For Each循环语句。

评分

参与人数 1 +1 收起 理由
lcbnyn + 1 按顺序给了8楼最佳答案,9楼就没法给了,只.

查看全部评分

回复

使用道具 举报

发表于 2011-7-27 00:03 | 显示全部楼层
哦,忘记了你现在应该学的是For to next
其实,我有点不明白,你既然知道循环cells的第1个参数row,而cells的第2个参数column为什么又不能循环呢?它们每个都是递增1,又有规律性,证明你没有活学活用。
希望你以后在写代码的时候多思考下,多问下自己有没有什么规律让其更简单一些。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-26 04:40 , Processed in 0.146381 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表