Google Sheets自定义函数开发:查找累计和达标位置
Google Sheets自定义函数:定位累计和达标时的位置
我刚好做过类似的需求,这就给你写一个完全符合要求的自定义函数,用Google Apps Script实现就行:
函数实现代码
打开你的Google Sheet,点击「扩展程序」→「Apps 脚本」,把下面的代码粘贴进去,保存项目(随便起个名字比如CumulativePositionFinder):
function FIND_CUMULATIVE_POSITION(range, target) { // 将输入的范围转换为一维数组(兼容行/列范围) const values = range.flat(); let cumulativeSum = 0; for (let i = 0; i < values.length; i++) { const currentValue = values[i]; // 可选:如果范围里有非数值单元格,抛出错误 if (isNaN(currentValue)) { throw new Error(`第${i+1}个元素不是有效数值`); } cumulativeSum += currentValue; // 检查累计和是否达到或超过目标值 if (cumulativeSum >= target) { // 返回位置(从1开始计数) return i + 1; } } // 遍历完所有元素仍未达标,抛出错误 throw new Error("累计和始终未达到指定目标值"); }
代码说明
- 参数处理:用
range.flat()把输入的行/列范围统一转成一维数组,不管你选的是横向还是纵向的单元格范围都能正常工作 - 累计判断:循环遍历每个元素,逐步累加,每一步都检查累计和是否达标,一旦满足就返回当前的位置(注意是从1开始计数,和你的示例完全匹配)
- 错误处理:如果遇到非数值单元格,会抛出明确的错误提示;如果所有元素累加完都没达到目标值,也会抛出对应的错误
测试示例
用你给出的测试数据(假设放在A1到A8单元格:10,12,14,15,18,3,8,9):
- 输入公式
=FIND_CUMULATIVE_POSITION(A1:A8, 24),返回3(10+12=22 <24,加14后36≥24,对应第3个元素) - 输入公式
=FIND_CUMULATIVE_POSITION(A1:A8, 60),返回5(前5个元素累加10+12+14+15+18=69≥60) - 输入公式
=FIND_CUMULATIVE_POSITION(A1:A8, 1000),会抛出错误「累计和始终未达到指定目标值」
如果需要调整位置的计数方式(比如从0开始),只需要把return i + 1改成return i就行,不过看你的示例是从1开始的,所以默认按这个来啦。
内容的提问来源于stack exchange,提问作者Lee Davis-Thalbourne
相关产品推荐
相关产品推荐

