You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:19:52