首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 办公应用 > OFFICE教程 >

请来指导,怎么用VBA实现多条件按列查询内容,多谢

2012-02-23 
请高手进来指导,如何用VBA实现多条件按列查询内容,谢谢!A表:登记姓名、性别,以及这些人在不同时候对某一问

请高手进来指导,如何用VBA实现多条件按列查询内容,谢谢!
A表:登记姓名、性别,以及这些人在不同时候对某一问题的多个回答;
B表:回答与得分的关系;
C表:分别统计不同人所对应的a、b、c的个数,并算出总得分

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

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

B表:回答与得分关系表:
回答对应得分
a1
b2
c3


C表:分别统计不同人所对应的a、b、c的个数,并算出总得分
姓名性别总得分a个数b个数c个数
张男8121
张女4210
李男8012


[解决办法]
Sheet1为A表,Sheet2为B表,Sheet3内写代码(C表)

VB code
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 WithEnd Sub结果:姓名 性别 总得分 a个数 b个数 c个数李    男    8    1    2张    男    8    1    2    1张    女    4    2    1 

热点排行