我有一个数据集,其中行代表学生的测试成绩,列代表各个测试问题。我想创建一个公式,将学生的各列(测试成绩;0 = 不正确,1 = 正确)相加,直到一行中有四个 0。例如,如果学生得分:
Q1 Q2 Q3 Q4 Q5 Q6 Q7 Q8 Q9 Q10 Q11 Q12 Q13 Q14 Q15 Q16 Q17 Q18 Q19 Q20
1 1 1 1 1 1 0 1 1 0 0 0 1 0 0 0 0 1 1 0
该公式应该返回 9,因为它一直求和直到 Q17 满足条件(连续四次错误回答)。
假设第一个学生的第一个问题的表现是单元格B2
(第一行是标题,第一列是学生姓名)。
任何帮助都将非常感激,因为这超出了我的 Excel 知识范围。
答案1
答案2
考虑以下用户定义函数:
Public Function SpecialSum(rng As Range) As Long
Dim r As Range, crit As Long, v As Long
SpecialSum = 0
crit = 0
For Each r In rng
v = r.Value
SpecialSum = SpecialSum + v
If v = 0 Then
crit = crit + 1
Else
crit = 0
End If
If crit = 4 Then Exit Function
Next r
End Function
它将范围内的值相加,直到遇到四个连续的零:
用户定义函数 (UDF) 非常容易安装和使用:
- ALT-F11 打开 VBE 窗口
- ALT-I ALT-M 打开新模块
- 粘贴内容并关闭 VBE 窗口
如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx
要删除 UDF:
- 调出如上所示的 VBE 窗口
- 清除代码
- 关闭 VBE 窗口
要从 Excel 使用 UDF:
=SpecialSum(B2:Z2)
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
有关 UDF 的详细信息,请参阅:
http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx
必须启用宏才能使其工作!