0

我希望我对这个问题有一个更准确的描述性标题,但我对 Excel 电子表格或 VBA 不是很了解(我主要是一名 Java 开发人员,在 Microsoft 世界中玩得不多)。

我正在尝试使用 Excel 电子表格来完成某些事情。我需要确定我是否可以使用数据透视表、数据透视图或其他一些内置功能来实现……或者我是否需要沿着编写自定义 VBA 代码的道路前进(或者可能完全使用另一个平台)。

电子表格的目的是帮助为组织(Toastmasters 俱乐部)创建时间表。这个组织有一个成员名册,它每周开会,并且在给定的会议中,不同的成员被分配到不同的角色。

我的电子表格如下所示:

第一个标签

一栏...代表成员名册的名称列表。

第二个标签

每行代表过去的会议日期。每个角色都有列,并且单元格将填充在该日期担任该角色的人员。我使用数据验证在每个单元格中提供第一个选项卡的花名册作为下拉列表。

第三个选项卡(可能是多个选项卡?)

这是整个事情的重点。对于每个可能的会议角色,我想查看哪些成员最“过期”分配给该角色。基本上,我想要一份所有俱乐部成员的列表,按照他们上一次担任该职位以来的时间排序。从未担任该角色的人将被排在列表的顶部。

第三个选项卡数据是否可以通过数据透视表等来完成……还是我误解了这些工具的目的和限制?

4

2 回答 2

1

我找到了一种可以使用数据透视表执行此操作的方法 - 每个角色一个。你是否应该有点怀疑,但取决于你真正拥有多少角色。我使用 2 作为示例使其工作,这是要点:

  • 您有一个包含名称的 (Excel) 表
  • 您有一个 (Excel) 表格,其中包含会议日期、角色 A、角色 B ...(我使用主席和秘书作为名义示例),这些单元格包含担任该角色的人的姓名

然后为每个角色创建一个数据透视表(插入 --> 数据透视表)。要使用的字段是: 行标签 - 您正在分析的任何角色;价值观 - 会议日期

然后,您可以通过进入字段设置来更改结果类型,并将其更改为最小值。请注意,只有担任过该角色的人才会出现在此处。

对每个角色重复此操作。

返回您的姓名表,并为每个角色添加一列,以显示他们上次担任该角色的时间。这个公式相当笨拙:

=IFERROR(GETPIVOTDATA("Meeting Date",Chair!$A$3,"Chair",People[[#This Row],[Name]]),0)

如果他们没有那个角色,GETPIVOTDATA 会出错,所以我用 0 替换错误(任意低数字)

然后,您可以使用以下方法确定最迟交该角色的人:

=OFFSET(People[[#Headers],[Name]],MATCH(MIN(People[LastChair]),People[LastChair],0),0)

如果出现平局,将在此处给出出现在您的姓名列表中的第一个人。

希望有点道理,有问题可以问

于 2011-01-25T21:00:31.670 回答
0

我的第一直觉是让您转到 Access,您可以在其中对您的内容进行 SQL 查询,但我确信这可以在 Access 中完成,无需任何自定义编码。

  1. 数据透视表可能有用,但我避免使用它们有几个原因(难以向普通用户描述、不会自动更新、难以格式化等),所以这里只使用 Excel 的内置单元格函数。
  2. 查看http://www.techonthenet.com/excel/formulas/index.php上的 vlookup ()countif()。(内置的帮助文件也可以。我只是更喜欢这个网站)
  3. 在下图中,我模拟了您的Tab2Tab3Tab2是没有方程的纯数据。 Vlookup() 要求此表按日期降序排序,并且日期列在最右侧。
  4. Tab3计算每个人担任该职位的 # 次以及他们最后一次担任该职位的时间。
  5. 单元格 C13 中的公式是=COUNTIF($B3:$B8,$B13)。即统计“Abe”出现在Tab2的主席一栏的次数。
  6. 单元格 D13 中的公式是=IF(C13>0,VLOOKUP($B13,$B$2:$D$8,3,FALSE),"-")。即,如果那个人曾经担任过该角色,那么它会找到最近的日期。
  7. 安全公式几乎相同。“上次服务”列现在是=IF(E13>0,VLOOKUP($B13,$C$2:$D$8,2,FALSE),"-")。需要在此处重命名范围以满足Vlookup函数的需要(此处使用 SQL 查询非常方便,但 Excel 不允许这样做)
  8. 很难定义某人是否“过期”,因为有些人会争辩说“Last Served”比“# Times Served”更重要,而另一些人则恰恰相反。我建议查看这两列并讨论一下。 示例图像
于 2011-01-25T21:25:47.053 回答