背景
我有一份 Excel 电子表格,里面记录了通过/不通过考试的结果。学生可以随意参加考试,直到通过或放弃。
学生;;结果;;日期 [电子邮件保护] ;; 未通过 ;; 2000-06-07 [电子邮件保护] ;; 通过 ;; 2000-06-07 [电子邮件保护];; 通过 ;; 2000-06-07 [电子邮件保护] ;; 未通过 ;; 2000-06-07 [电子邮件保护] ;; 通过 ;; 2000-06-07 [电子邮件保护] ;; 通过 ;; 2000-06-08 [电子邮件保护] ;; 未通过 ;; 2000-06-08
问题
使用数据透视表或其他表,如何让 Excel 在另一张表上显示一份干净的报告或这些数据的表示来回答以下问题:
参加过考试但从未获得及格分数的人都是谁?
在上面的例子中,它只会向我显示[电子邮件保护];; 未通过 ;; 包含 Delta 参加考试的所有日期。
我知道 Excel 本身不是一个数据库也不是一个报告工具,但如果我能让它做到这一点就太好了。
答案1
我把你的问题中的数据放入工作表的 A、B 和 C 列中,并在单元格 D2 中输入数组公式:
=SUM(($A$2:$A$8=A2)*($B$2:$B$8="通过"))
然后将其复制到列下(记住使用 ctrl+shift+enter 输入公式)。
D 列显示0
该学生未通过考试的情况。
您可以使用数据选项卡上的“删除重复项”来删除重复项(清除对话框中的日期框),以留下未通过考试的人员列表,然后按 D 列进行筛选(再次在“数据”选项卡上)。
答案2
我将添加第 4 列,将“通过”和“未通过”转换为数字,例如 =If(B2="pass",1,0)。我们将此新列称为“测试”。然后将此公式扩展到所有行。
然后,您可以轻松创建一个数据透视表,其中学生为行字段,日期为列字段,测试为数据字段。测试数据是“测试总和”还是“测试计数”并不重要
然后隐藏所有 > 0 的测试值。
答案3
录制宏...执行以下操作
选择整个表格
创建新的工作表
粘贴表格
按结果排序
那么如果你真的只想要结果,你需要在代表宏的 VBA 文件中使用一些条件逻辑
否则,学习如何在 VSTO 中编程并在 .NET 中执行,这是一个更好的解决方案,但根据您的能力,可能需要做更多的工作。
答案4
以下是我处理类似情况的方法。假设学生姓名在 A 中,科学成绩在 B 中,数学成绩在 C 列中,D 是结果列。
- 我们可以在 D2 中使用逻辑 And,例如 =IF(AND(B2>50, C2>50),“pass”、“fail” 。它会在 D 列中给出通过或失败的结果。
- 然后,我们可以通过使用求和函数将名称和结果放在行值中以及将科学和数学标记放在值表中来绘制数据透视表。
- 它将为我们提供通过和不通过学生类别的数据透视表以及相应的列标题。
- 现在我们可以简单地剪切和粘贴所需的数据,即本例中科学和数学都不及格的学生。