我的情况是这样的。我是一名校长,正在为我的老师创建一个跟踪器,用于跟踪学生在评估中的进步情况。在当前的跟踪器中,它的设置如下:
% of 67%
Students Met
**Student Name Week 1 Goal: Week 1 Actual: Goal Met?:**
Example A 23 32 Y
Example B 45 44 N
Example C 53 55 Y
我使用公式对“目标达成情况?”列进行 Y 或 N 的输入,具体取决于实际值是否达到或超过目标值。然后,我使用另一个公式来确定学生达成率的百分比,方法是对“目标达成情况”列中的“Y”进行 COUNTIF,将其除以该列的 COUNTA,然后乘以 100。
我想知道的是……这对老师来说非常麻烦,我放的列和公式越多,老师输入错误的地方和弄乱公式的风险就越大……我有没有办法只对每周目标和每周实际列的数组进行 COUNTIF,然后只计算实际值 >= 目标值的行?比如有没有办法做 COUNTIF(E5:F17,F>=E),并在条件中的 E 和 F 旁边放一些符号作为变量,这样它就可以逐行比较值,然后计算 F 值大于 E 值的行?
任何建议都很好,因为这样我就可以消除“目标达成”列(他们总是输入这个列,而我必须每周回去修改)。在庞大的跟踪器上,每 3 列都要保护,这很烦人!
非常感谢您的建议!
布伦丹
答案1
您应该始终使用密码保护您不想被更改的单元格。
要回答您的问题,您需要输入一个数组公式。假设您的列名称从 A3 开始,请键入以下内容,然后单击Ctrl+ Shift+ Enter。
=SUM(IF(C4:C6>=B4:B6,1,0))/COUNT(C4:C6)
如果操作正确,整个公式周围将出现花括号。
={SUM(IF(C4:C6>=B4:B6,1,0))/COUNT(C4:C6)}
答案2
我的解决方案
以下数组公式,加上适当调整的单元格引用,应该可以实现您想要的效果:
=SUM(1*((OFFSET(C2,0,0,COUNT(C:C),1)-OFFSET(B2,0,0,COUNT(C:C),1))>=0))/COUNT(C:C)
例子:
设置C2引用第一个OFFSET
到顶部单元格中的“实际”数据(F5在您的示例中),B2OFFSET
引用“目标”数据倒数第二个单元格(E5在你的),并设置所有的致谢:致谢引用包含“实际”或“目标”数据之一的列(乙:乙或者女:女在你的)。 确定您选择替换的列中只有包含数值数据的单元格致谢:致谢引用是那些包含“实际”或“目标”值的单元格,否则公式将返回不准确的结果,或者完全失败。
要将公式作为数组公式输入,请正确输入公式,然后按 Ctrl-Shift-Enter,而不是直接按 Enter。(请参阅这里有关数组公式的更多信息,或者直接在线搜索“excel 数组公式”。) 任何时候您对公式进行了更改,总是必须使用 Ctrl-Shift-Enter 输入它才能使其正常运行。
怎么运行的
- 每个都
COUNT
检索现有数据的行数。 - 两次
OFFSET
调用检索了两个感兴趣的数组,即“实际”分数和“目标”分数。在每次调用中:- 第一个参数标记数组的左上角单元格;
- 第二和第三个参数分别是行和列偏移量(这里都为零);
- 第四个参数表示数组中要包含的行数;
- 第五个参数表示要包含的列数。
- 由于这是一个数组公式,减去“实际”和“目标”数组将返回一个大小相同的数组,但包含它们之间的元素差异。
- 比较
>=0
将差异数组转换为TRUE
/FALSE
值数组,指示是否达到目标。 - 用于
1*
将布尔值TRUE
和FALSE
值转换为数字1
和0
,然后通过SUM
函数进行计数。- 在 Excel 中,
TRUE
和FALSE
隐式地携带一和零的数值。 TRUE
但是,如果您尝试将包含/值的范围或数组传递FALSE
给类似的函数SUM
,它将忽略TRUE
值并返回零。- 因此,将整个
TRUE
/FALSE
数组乘以 1 是一种欺骗 Excel 以有用的方式解释数组的方法。
- 在 Excel 中,
SUM
除以就是COUNT
达到设定目标的学生人数的期望比例。
编辑:根据 wbeard52 的回答,在 Excel 2010 或更高版本中应该可以用1*...
结构替换 hack IF
。在旧版本的 Excel 中,IF
数组输入处理不当。
答案3
另外几个数组公式选项,因此您需要按Ctrl+ Shift+Enter来提交它们。
查找已达成的目标数量:
=SUM(--(C4:C6>B4:B6))
要查找实现目标的百分比:
=SUM(--(C4:C6>B4:B6))/count(C4:C6)
您可以单独使用它们。请记住按Ctrl+ Shift+将它们作为数组公式输入Enter。
答案4
另一种“数组公式”方法是这样的:
=AVERAGE(IF(E5:E17<>"",IF(F5:F17>=E5:E17,1,0)))
已确认CTRL++SHIFTENTER
这样你就得到了一个实际的百分比,比如 0.5 - 如果你想要 50,乘以 100