1

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

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

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

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

问题是这样的:我希望工作表 2 中的每个组行都有一个公式,该公式会生成在工作表 1 上分配给该组的所有用户的列表。我的意思是相当于“从 PeopleTab 中选择 *其中 GROUP = ThisGroup”。生成的单元格只会将名称粘在一起,例如“Bob Smith,Joe Jones,Sally Sanderson”

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

这是所需结果的示例(以破折号分隔。找不到使它看起来不错的方法,表格标签似乎在这里不起作用):

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

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

我在表 2 的第二列上使用什么公式(甚至什么函数)来从该组的成员中制作一个平面列表?

4

2 回答 2

1

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

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

这表示“获取我的源范围,并返回与这些条件中的每一个匹配的单元格”。

您可以引用整个列(第一个工作表中的名称,A 列),并使用另一列(工作表 1 的 B 列中选择的组)的内容过滤这些值'Sheet1'!A:A,并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(...))) 等等;我在预算电子表格中使用它来计算按月份和类别分组和汇总的收入/费用。

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

于 2012-11-30T03:00:27.380 回答
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
于 2012-12-05T12:47:48.360 回答