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

xdr5xdr5 2011-07-05 05: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
...全文
618 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xdr5xdr5 2011-07-10
  • 打赏
  • 举报
回复
有网友说能用vba调用sql语句的方法,把两个表联合查询,不知道怎么弄。我想学习下不同实现方法,能指导下吗?
z_wenqian 2011-07-08
  • 打赏
  • 举报
回复
那就只有用查找了,在B表中查找对应的得分,或者将长字符串先替换成短的,在用以上代码解决就行了,因为得分总不会很多吧,替换也很快的。
xdr5xdr5 2011-07-06
  • 打赏
  • 举报
回复
如果a、b、c是更长些的字符串,如中文,请问程序怎么实现?谢谢!
xdr5xdr5 2011-07-05
  • 打赏
  • 举报
回复
谢谢,学习中!
z_wenqian 2011-07-05
  • 打赏
  • 举报
回复
李 男 是对其的原因: b=1 c=2
z_wenqian 2011-07-05
  • 打赏
  • 举报
回复
Sheet1为A表,Sheet2为B表,Sheet3内写代码(C表)

Private Sub Worksheet_Activate()
Dim i As Long, k As Long
Dim s As String, n As Long
Dim c
k = 2: Rows("2:65530").ClearContents
With Sheet1
.Rows("2:65530").Sort Key1:=.Range("A2"), Order1:=xlAscending, Key2:=.Range("B2"), Order2:=xlAscending '按姓名、性别排序

s = .[C2]

'如果当前行和上一行姓名性别一样,就组合s,否则求总得分和abc的个数
For i = 3 To .[A65530].End(xlUp).Row + 1
If .Range("A" & i) = .Range("A" & i - 1) And .Range("B" & i) = .Range("B" & i - 1) Then
s = s & ";" & .Range("C" & i) '组合成绩字符串
Else
Cells(k, 1) = .Range("A" & i - 1) '姓名
Cells(k, 2) = .Range("B" & i - 1) '性别
s = LCase(s)
For Each c In Split(s, ";")
n = Asc(c) - Asc("a") + 1 '对应:a->1 b->2 c->3
Cells(k, n + 3) = Cells(k, n + 3) + 1 ' a b c 的个数
Cells(k, 3) = Cells(k, 3) + Sheet2.Cells(n + 1, 2) '求和
Next c
k = k + 1: s = .Range("C" & i)
End If
Next i
End With
End Sub

结果:
姓名 性别 总得分 a个数 b个数 c个数
李 男 8 1 2
张 男 8 1 2 1
张 女 4 2 1

6,210

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office应用
社区管理员
  • Microsoft Office应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧