Excel精英培训网

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

各位老师,Excel做完问卷后,如何用VB编程进行自动统计?

[复制链接]
发表于 2013-5-16 10:27 | 显示全部楼层 |阅读模式
本帖最后由 yuzha 于 2013-5-16 10:53 编辑

最近我在用Excel做问卷调查,以前在做完之后,每次都是手工统计,这样做很繁琐。

目前我做问卷是用窗体分组框,我知道Excel的功能是很神通广大的,应该可以把这些内容进行汇总

于是我就在Excel论坛上找了一些有关于如何自动统计问卷的帖子,其中有一个写的比较适合我这种菜鸟新手看。我已经按照这样的方式来做了一下,但是目前我发生了一个问题。

我设置了“提交”的按钮,每次提交之后,问卷的链接中的内容会清空,然后内容会被复制到后页的“汇总页”上,这个是我的期望效果,但是我目前用了VBA的那个程序,似乎中间有一个步骤出错了,目前“汇总页”中的信息并不累计的,而是每一次添加之后内容被自动更新了,我想再请教一下,这个是因为什么原因? 是编程当中,哪里出错了咧?

请各位熟悉VB编程的老师们能帮我看一下吗?

我的附件: 我的Sample.rar (20.97 KB, 下载次数: 39)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-17 00:03 | 显示全部楼层
Cells(65536, 1)改为Cells(65536, 2)即可。
不过这个程序写得不好,最好能用窗体。明天如果有空,我会写一下出来。
回复

使用道具 举报

发表于 2013-5-17 07:12 | 显示全部楼层
本帖最后由 ligh1298 于 2013-5-17 07:50 编辑

我也是初学者,仅供参考。

我的Sample.rar

27.82 KB, 下载次数: 57

回复

使用道具 举报

 楼主| 发表于 2013-5-17 10:25 | 显示全部楼层
silenthunter 发表于 2013-5-17 00:03
Cells(65536, 1)改为Cells(65536, 2)即可。
不过这个程序写得不好,最好能用窗体。明天如果有空,我会写一 ...

谢谢您的回复,果然这样改过之后的确就好了。
不过我想问一下,为什么这样从1改为2之后就好了呢?

如果您有更好的程序也请教教我,谢谢您了{:091:}
回复

使用道具 举报

发表于 2013-5-17 10:30 | 显示全部楼层
本帖最后由 无聊的疯子 于 2013-5-17 10:33 编辑
yuzha 发表于 2013-5-17 10:25
谢谢您的回复,果然这样改过之后的确就好了。
不过我想问一下,为什么这样从1改为2之后就好了呢?

cells 中文意思是 单元格,第一个参数表示行,只能是数字,第二个参数表示列,可以是数字或字母

cells(65536,1) 也就是  A65536 单元格,因为1 列就是A列
cells(65536,"A") 和上面是一样的

改成2 以后就成了 B65536 单元格了,至于为什么。。自己研究下你的数据就知道了吧!!

cells 可以只输入一个“数字”参数,不过这基本上不用,只需要了解一下就行了
如 cells(1)  表示 A1 单元格,Cells(5) 表示 E1 单元格
对于03的文件 cells(257) 表示 A2 单元格 ,因为03最大 256 列,这个用得少,了解一下就行了
回复

使用道具 举报

发表于 2013-5-17 10:44 | 显示全部楼层
将你的代码直接优化一下

  1. Sub Macro3()
  2. Dim R As Long
  3. With Sheet1
  4.   R = .Cells(65536, 1).End(xlUp).Row + 1
  5.   If R < 4 Then R = 4
  6.   .Cells(R, "A").Value = Range("C5").Value
  7.   .Cells(R, "N").Value = Range("b21").Value
  8.   .Range(.Cells(R, "C"), .Cells(R, "N")).Value = Range("J27:U27").Value
  9. End With
  10. Range("i27:u27").ClearContents
  11. MsgBox "谢谢参与,信息已经保存"
  12. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-5-17 11:09 | 显示全部楼层
ligh1298 发表于 2013-5-17 07:12
我也是初学者,仅供参考。

谢谢ligh1298给了我另外一个VB的程序,我试过了,也可以用的。
但是因为我是VB的新手,或者说连新手都称不上,叫我小白吧,所以我不是很能理解,为什么您的程序是这样编写的。
能简单教我一下,每一个部分的意思吗?
非常谢谢你
回复

使用道具 举报

 楼主| 发表于 2013-5-17 11:19 | 显示全部楼层
无聊的疯子 发表于 2013-5-17 10:44
将你的代码直接优化一下

非常感谢您的回复,我会再好好研究一下,争取对VB编程更有了解,努力从“小白”进阶……{:011:}
回复

使用道具 举报

发表于 2013-5-17 11:43 | 显示全部楼层
yuzha 发表于 2013-5-17 11:09
谢谢ligh1298给了我另外一个VB的程序,我试过了,也可以用的。
但是因为我是VB的新手,或者说连新手都称 ...

'我也是一VBA小白,可能说的不是那么准。
Sub Macro3()
Dim R%, k%, sht1 As Worksheet, sth2 As Worksheet '申明变量
Set sht1 = Sheets("Pre-Questionnaire") '以下可用sht1替代 Sheets("Pre-Questionnaire")
Set sht2 = Sheets("统计汇总") '以下可用sht2替代Sheets("统计汇总")
R = sht2.[b65536].End(xlUp).Row + 1 '统计汇总表中B列有数据的最大行号加一
If R < 4 Then R = 5
With sht2 '这部分你懂,是数据的写入
.Cells(R, 1) = sht1.Range("C4")
.Cells(R, 2) = sht1.Range("j27")
.Cells(R, 3) = sht1.Range("k27")
.Cells(R, 4) = sht1.Range("n27")
.Cells(R, 5) = sht1.Range("o27")
.Cells(R, 6) = sht1.Range("p27")
.Cells(R, 7) = sht1.Range("q27")
.Cells(R, 8) = sht1.Range("r27")
.Cells(R, 9) = sht1.Range("s27")
.Cells(R, 10) = sht1.Range("t27")
.Cells(R, 11) = sht1.Range("u27")
.Cells(R, 12) = sht1.Range("b21")
End With
For Each rn In sht2.Range("b4:b" & R - 1) '遍历统计汇总表的B列第4行及以下有数据单元格
k = k + 1 '计数、累加
sht2.Cells(k + 4, 1) = k '得到序号
Next
sht2.[c1] = k '在C1单元格统计出参与人数
sht1.Range("i27:u27").ClearContents '清空
sht2.Activate '激活“统计汇总表”
MsgBox "谢谢参与,信息已经保存"
End Sub
回复

使用道具 举报

 楼主| 发表于 2013-5-17 15:18 | 显示全部楼层
ligh1298 发表于 2013-5-17 11:43
'我也是一VBA小白,可能说的不是那么准。
Sub Macro3()
Dim R%, k%, sht1 As Worksheet, sth2 As Works ...

非常谢谢,你的帮助!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 05:28 , Processed in 0.354623 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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