首页 > 解决方案 > 条件运行计数/累积和:寻找公式或脚本

问题描述

我在仓库工作,我使用 Google 表格来跟踪库存。加减法很容易,但我的任务是创建一个“储备”系统:

许多库存是为即将到来的工作而保留的。当该库存被订购和接收时,储备数量是“满意的”,并减少收到的件数。像 ADD 和 SUBTRACT 函数一样设置它的问题是,并非所有收到的库存都是“保留”的,我的 RESERVE 总计最终为“-57”、“-72”、“-112”等。

我有一个大型表单响应数据集,记录在四列中:时间戳、项目 ID#、操作(添加、减去或保留)和数量。我正在寻找的是一种使用 D 列“数量”中的值为每个唯一项目 ID# 在 E 列中创建运行计数的方法。我需要任何值 <0 来返回“0”。

示例表

电子表格屏幕截图

我已经能够创建一个运行计数公式,一次满足我对一个项目 ID# 的条件。但是,为了避免为每个项目 ID# 创建单独的列,我需要弄清楚如何将其分别应用于每个唯一的项目 ID#,并将其排列在 E 列中,以便自动计算每个新的表单响应。

=if(C2="RESERVE",E1+D2,if(and(C2="ADD",(E1+D2)<0),0,E1+D2))

我能找到的最接近解决方案的是 user79865 为这个问题创建的脚本,标题为:“Running Total In Google Sheets with Array”。不幸的是,尝试将其插入 Google Sheets 脚本编辑器会给我一个错误弹出窗口:TypeError: Cannot read property "length" from undefined。(第 2 行,文件“runningtotal”)

我没有编程背景,从没想过我会查看代码只是为了进行统计。

如果有人可以对此提供任何见解,修复或替换脚本或提供 ARRAYFORMULA 解决方案,我将不胜感激!

function runningTotal(names, dates, amounts) {
  var sum, totals = [], n = names.length;
  if (dates.length != n || amounts.length != n) {
    return 'Error: need three columns of equal length'; 
  }
  for (var i = 0; i < n; i++) {
    if (names[i][0]) {
      sum = 0;
      for (var j = 0; j < n; j++) {
        if (names[j][0] == names[i][0] && dates[j][0] <= dates[i][0]) {
          sum = sum + amounts[j][0];
        }
      }
    }
    else {
      sum = '';
    }
    totals.push([sum]);
  }
  return totals;
}

标签: sqlgoogle-sheetsgoogle-sheets-formula

解决方案


推荐阅读