有条件的跑步提示/累计总和:寻找公式或脚本

时间:2019-03-05 19:12:30

标签: sql google-sheets google-sheets-formula

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

为将来的工作预留了许多库存。当订购和接收该库存时,储备数量“已满足”,并减少了接收到的件数。像“添加”和“减”功能一样进行设置的问题在于,并非所有收到的库存都被“保留”,而我的保留总数最终变为“ -57”,“-72”,“-112”等。

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

Example Sheet

spreadsheet screenshot

我已经能够创建一个连续的计算公式,一次满足一个ID号的条件。但是,为了避免为每个Item ID#创建单独的列,我需要弄清楚如何分别将其应用于每个唯一的Item 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:无法从未定义中读取属性“ length”。 (第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;
}

0 个答案:

没有答案