需要比较两个列表中的值,其中两个列表都有多个重复项[VBA]

时间:2016-03-14 16:52:11

标签: excel vba excel-vba

我已经彻底搜索过,但找不到适用于我的问题的内容。

我有两个清单。第一个列表(“参考”)包含配对值列表:组和成员。第二个列表(“数据”)包含具有许多成员和属性的无组织数据。我需要比较两个列表,将各个成员的属性组合到正确的组中。

为了更清楚,这是我正在尝试做的一个很好的例子。假设你有一个学校的孩子名单(会员)和他们的考试成绩(属性)。

数据:

  • Alex | 90
  • 鲍勃| 80
  • 卡罗尔| 95
  • 迪娜| 100
  • 迪娜| 90
  • 鲍勃| 90

以及他们的群组列表。

参考:

  • ALLSTUDENTS |亚历
  • ALLSTUDENTS |鲍勃
  • ALLSTUDENTS |卡罗尔
  • ALLSTUDENTS |迪娜
  • MALES |亚历
  • MALES |鲍勃
  • 女性|卡罗尔
  • 女性|迪娜
  • FRESHMAN |卡罗尔
  • FRESHMAN |鲍勃
  • SENIORS |亚历
  • SENIORS |迪娜

我需要的是我的输出是一个组列表和该组中学生的平均分数。

  • ALLSTUDENTS | 93
  • MALES | 87
  • 女性| 95
  • FRESHMAN | 90
  • SENIORS | 92

我目前有一个基本的VBA宏循环参考列表(~1500值),然后每个条目循环通过一个测试数据列表。但是,在数据列表中使用~500个值运行几乎需要一分钟,而实际的数据列表可以包含5,000到100,000个条目。我正在寻找一种更快的方法来做到这一点。我已经看到了双循环问题的VBA解决方案,但是当你找到匹配或使用查找来找到匹配时,它们依赖于退出循环。我不能这样做,因为参考和数据列表中都有不确定数量的重复值。

对小说感到抱歉。谢谢你的帮助。

1 个答案:

答案 0 :(得分:2)

假设数据如下图所示,请采取以下措施:

  • G1公式:=VLOOKUP(F1,$A$1:$B$6,2,0) 复制行
  • K1公式:=AVERAGEIF($E$1:$E$12,J1,$G$1:$G$12) 复制行

enter image description here

编辑

这是另一种考虑每人多个考试成绩的方法。您可以根据需要轻松添加任何组并复制公式。

  • 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))) 向下复制

enter image description here