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

时间:2012-11-30 00:59:21

标签: excel vba ms-office

我确信这不是一件非常困难的事情,但这并不是那种容易适合互联网搜索的问题。

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

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

该下拉列表来自工作表2,其中每个组都有一行。因此,Sheet 1的“Group”列的数据验证源实际上只是“= Sheet2!$ a1:a100”或其他什么。

问题在于:我希望工作表2中的每个组行都有一个公式,该公式会生成已在Sheet 1上分配给该组的所有用户的列表。我的意思相当于“选择” *来自PeopleTab,其中GROUP = ThisGroup“。由此产生的细胞只会像“鲍勃史密斯,乔琼斯,莎莉桑德森”一样将名字粘在一起

我一直在谷歌搜索几个小时,但我想不出用一种方法来表达我的搜索查询以获得我想要的结果。

以下是所需结果的示例(Dash-delimited。找不到让它看起来很漂亮的方法,表格标签似乎不适用于此处):

(第1页)
Bob Smith - 第1组(从下拉列表中选择)
Joe Jones - 第2组(从下拉列表中选择)
Sally Sanderson - 第1组(从下拉列表中选择)

(表2)
第1组 - Bob Smith,Sally Sanderson(公式结果)
第2组 - Joe Jones(公式结果)

我在第2张第2栏中使用什么公式(甚至是什么函数)来制作该组成员的平面列表?

2 个答案:

答案 0 :(得分:1)

我使用FILTER公式来达到类似的效果。基本格式为:

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

这表示“获取我的源范围,并返回符合这些条件的单元格”。

您可以引用整个列(第一张表中的名称,A列),并使用'Sheet1'!A:A作为另一列(在sheet1上的B列中选择的组)的内容过滤这些值源代码,EQ('Sheet1'!B:B, $Ax)作为条件,其中$Ax是对工作表2中的组名称的引用,A列(将x替换为行号)。

例如在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返回一列。转置只是将该列转换为行:)

作为旁注,你可以使用过滤器做其他整洁的事情,比如找到过滤范围的总和(=SUM(FILTER(...)))等等;我在预算电子表格中使用它来计算按月份和类别分组和汇总的收入/支出。

免责声明:在google docs电子表格中测试,因为我没有MS Excel。

答案 1 :(得分:0)

在表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