需要比较两个列表中的值,其中两个列表都有多个副本
我已经彻底search,但找不到适合我的问题的东西。
我有两个名单。 第一个列表(“参考”)包含配对值列表:一个组和一个成员。 第二个列表(“数据”)包含许多成员和属性的非组织数据。 我需要比较两个列表,将各个成员的属性合并到正确的组中。
为了使这个更清楚,这是我正在尝试做的一个很好的例子。 假设你有一个学校(会员)的孩子名单和他们的考试成绩(属性)。
数据:
- Alex | 90
- Bob | 80
- 卡罗尔| 95
- 迪娜| 100
- 迪娜| 90
- Bob | 90
- 等等
和他们的组的列表。
参考:
- ALLSTUDENTS | 亚历克斯
- ALLSTUDENTS | 短发
- ALLSTUDENTS | 颂歌
- ALLSTUDENTS | 迪娜
- MALES | 亚历克斯
- MALES | 短发
- 女性| 颂歌
- 女性| 迪娜
- FRESHMAN | 颂歌
- FRESHMAN | 短发
- SENIORS | 亚历克斯
- SENIORS | 迪娜
- 等等
我所需要的作为我的输出是一个小组列表和该组学生的平均分数。
- ALLSTUDENTS | 93
- MALES | 87
- 女性| 95
- FRESHMAN | 90
- SENIORS | 92
- 等等
我目前有一个简单的VBAmacros,通过参考列表(~1500个值)循环,然后对每个条目通过testing数据列表循环。 但是,这在数据列表中运行几乎需要一分钟的时间才能运行〜500个值,真正的数据列表可以有5,000到100,000个条目。 我正在寻找一个更快的方式来做到这一点。 我已经看到了VBA解决双循环问题的方法,但是当你find一个匹配或者使用查找来find一个匹配时,他们就依靠退出循环。 我不能这样做,因为在“参考”和“数据”列表中都有不确定数量的重复值。
对不起,小说。 谢谢你的帮助。
假设数据如下图所示,请采取以下措施:
- G1公式:
=VLOOKUP(F1,$A$1:$B$6,2,0)
复制行 - K1公式:
=AVERAGEIF($E$1:$E$12,J1,$G$1:$G$12)
复制行
编辑
这是考虑每个人多个testing分数的另一种方法。 您可以根据需要轻松添加更多组,并复制公式。
- C2公式:
=IF(COUNTIFS($J$2:$J$13,C$1,$K$2:$K$13,$A2)=1,$B2,"-")
- P2公式:
=AVERAGE(OFFSET(B2:B7,0,MATCH(O2,$C$1:$G$1)))