需要比较两个列表中的值,其中两个列表都有多个副本

我已经彻底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)))

在这里输入图像说明