mysql5资源共享

 找回密码
 立即注册
查看: 7926|回复: 1850

[Office] 请高手进来指导,如何用VBA实现多条件按列查询内容,谢谢!

  [复制链接]

2

主题

8

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2011-7-5 17:51:37 | 显示全部楼层 |阅读模式
A表:登记姓名、性别,以及这些人在不同时候对某一问题的多个回答;
B表:回答与得分的关系;
C表:分别统计不同人所对应的a、b、c的个数,并算出总得分

请教高手,怎么直接用VBA程序直接算出C表中“总得分”列的数据(不需要增加a个数、b个数、c个数这样的辅助列)?谢谢!

附:
A表:               
姓名        性别        不同回答
张        男        a;b;c
张        女        a;b
李        男        c
张        男        b
张        女        a
李        男        b;c

B表:回答与得分关系表:       
回答        对应得分
a        1
b        2
c        3


C表:分别统计不同人所对应的a、b、c的个数,并算出总得分                                       
姓名        性别        总得分        a个数        b个数        c个数
张        男        8        1        2        1
张        女        4        2        1        0
李        男        8        0        1        2
回复

使用道具 举报

0

主题

217

帖子

456

积分

中级会员

Rank: 3Rank: 3

积分
456
发表于 2011-7-5 20:44:53 | 显示全部楼层
Sheet1为A表,Sheet2为B表,Sheet3内写代码(C表)

  1. PrivateSubWorksheet_Activate()
  2. DimiAsLong,kAsLong
  3. DimsAsString,nAsLong
  4. Dimc
  5. k=2:Rows("2:65530").ClearContents
  6. WithSheet1
  7. .Rows("2:65530").SortKey1:=.Range("A2"),Order1:=xlAscending,Key2:=.Range("B2"),Order2:=xlAscending'按姓名、性别排序

  8. s=.[C2]

  9. '如果当前行和上一行姓名性别一样,就组合s,否则求总得分和abc的个数
  10. Fori=3To.[A65530].End(xlUp).Row+1
  11. If.Range("A"&i)=.Range("A"&i-1)And.Range("B"&i)=.Range("B"&i-1)Then
  12. s=s&";"&.Range("C"&i)'组合成绩字符串
  13. Else
  14. Cells(k,1)=.Range("A"&i-1)'姓名
  15. Cells(k,2)=.Range("B"&i-1)'性别
  16. s=LCase(s)
  17. ForEachcInSplit(s,";")
  18. n=Asc(c)-Asc("a")+1'对应:a->1b->2c->3
  19. Cells(k,n+3)=Cells(k,n+3)+1'abc的个数
  20. Cells(k,3)=Cells(k,3)+Sheet2.Cells(n+1,2)'求和
  21. Nextc
  22. k=k+1:s=.Range("C"&i)
  23. EndIf
  24. Nexti
  25. EndWith
  26. EndSub

  27. 结果:
  28. 姓名性别总得分a个数b个数c个数
  29. 李        男        8        1        2
  30. 张        男        8        1        2        1
  31. 张        女        4        2        1       

复制代码
回复

使用道具 举报

0

主题

217

帖子

456

积分

中级会员

Rank: 3Rank: 3

积分
456
发表于 2011-7-5 20:46:22 | 显示全部楼层
李男是对其的原因:b=1c=2
回复

使用道具 举报

2

主题

8

帖子

22

积分

新手上路

Rank: 1

积分
22
 楼主| 发表于 2011-7-5 23:53:12 | 显示全部楼层
谢谢,学习中!
回复

使用道具 举报

2

主题

8

帖子

22

积分

新手上路

Rank: 1

积分
22
 楼主| 发表于 2011-7-6 21:38:01 | 显示全部楼层
如果a、b、c是更长些的字符串,如中文,请问程序怎么实现?谢谢!
回复

使用道具 举报

0

主题

217

帖子

456

积分

中级会员

Rank: 3Rank: 3

积分
456
发表于 2011-7-8 05:33:41 | 显示全部楼层
那就只有用查找了,在B表中查找对应的得分,或者将长字符串先替换成短的,在用以上代码解决就行了,因为得分总不会很多吧,替换也很快的。
                                                       
                                                               
回复

使用道具 举报

2

主题

8

帖子

22

积分

新手上路

Rank: 1

积分
22
 楼主| 发表于 2011-7-10 15:33:29 | 显示全部楼层
有网友说能用vba调用sql语句的方法,把两个表联合查询,不知道怎么弄。我想学习下不同实现方法,能指导下吗?
回复

使用道具 举报

0

主题

46

帖子

180

积分

注册会员

Rank: 2

积分
180
发表于 2019-12-11 18:23:48 | 显示全部楼层
回复

使用道具 举报

0

主题

61

帖子

236

积分

中级会员

Rank: 3Rank: 3

积分
236
发表于 2019-12-15 16:46:30 | 显示全部楼层
回复

使用道具 举报

0

主题

61

帖子

236

积分

中级会员

Rank: 3Rank: 3

积分
236
发表于 2019-12-16 11:35:20 | 显示全部楼层
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|mysql5.com Inc. ( 闽ICP备17002856号-1 )

GMT+8, 2020-4-2 15:17 , Processed in 0.053328 second(s), 18 queries .

Powered by MySQL5.com X3.4

© 2003-2019 MySQL5.com.

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