聚合匹配标签的Excel单元格内容

我相信这不是一个非常困难的事情,但这不是一个简单的问题。

我已经分配了一个涉及复杂电子表格的工作。 我已经完成了通常= SUM和其他基本的Excel公式,并且我已经有了足够的编码背景,至less可以通过VBA来模糊我的方式,但我不确定如何继续处理任务。

简单的版本:在工作表1我有一个人的名单(每行一个,在A列的人的名字),在图表2我有一个组的列表(每行一个,组名A列)。 工作表1中的每个名称都有自己的行,我有一个“数据validation”下拉菜单,您可以在其中select每个人所属的组。

该下拉菜单来源于表2,其中每个组都有一行。 因此,基本上Sheet 1的“Group”列的数据validation源只是“= Sheet2!$ a1:a100”或其他。

问题是这样的:我希望工作表2中的每个组的行都有一个公式,这个公式会导致在工作表1上分配给该组的所有用户的列表。我的意思是相当于“从PeopleTab中select” GROUP = ThisGroup“。 由此产生的单元格就像“Bob Smith,Joe Jones,Sally Sanderson”

我一直在谷歌search几个小时,但我想不出一种方法来短语我的search查询来获得我想要的结果。

下面是一个想要的结果的例子(Dash-delimited。找不到一个让它看起来不错的方法,表格标签在这里似乎不起作用):

(表1)
鲍勃史密斯 – 组1(从下拉列表中select)
乔·琼斯 – 第二组(从下拉列表中select)
Sally Sanderson – 第1组(从下拉列表中select)

(第2页)
第一组 – Bob Smith,Sally Sanderson(公式结果)
第二组 – 乔·琼斯(公式的结果)

我在表2的第二栏用什么公式(或甚至是什么函数)来从该组的成员列出一个扁平列表?

我已经使用FILTER公式来实现类似的效果。 基本格式是:

 =FILTER(source, condition, [more conditions...]) 

这就是说“把我的源范围,并返回匹配这些条件的单元格”。

您可以引用整个列(第一个工作表A列中的名称),并使用'Sheet1'!A:A的另一列(工作表1中列B中选定的组)的内容过滤这些值'Sheet1'!A:A源和EQ('Sheet1'!B:B, $Ax)作为条件,其中$Ax是表2中A列的组名称的引用(用行号replacex)。

例如在sheet2你可以有这样的东西:

 ------------------------------------------------------------------- | A | B ------------------------------------------------------------------- | Group1 | =TRANSPOSE(FILTER('Sheet1'!A:A, EQ('Sheet1'!B:B, $A1))) ------------------------------------------------------------------- | Group2 | =TRANSPOSE(FILTER('Sheet1'!A:A, EQ('Sheet1'!B:B, $A2))) ------------------------------------------------------------------- 

TRANSPOSE是必需的,因为您的源范围是一个列,所以您从FILTER获取一列。 转置只是将该列转换成一行:)

作为一个方面的说明,你可以做其他整洁的事情,像find一个过滤范围的总和( =SUM(FILTER(...)) )等等; 我在预算电子表格中使用它来计算按月份和类别分组和汇总的收入/支出。

免责声明:在谷歌文档电子表格中testing,因为我没有MS Excel。

在表1中:VBA

 Private Sub worksheet_Change(ByVal Target as Range) if target.row =1 and target.value<>"" then target.offset(,1)=sheets("sheet2").cells(application.match(target.value,sheets("sheets").columns(1),0),2).value End sub