Условное выполнение подсчета / накопленной суммы: поиск формулы или сценария - PullRequest
0 голосов
/ 05 марта 2019

Я работаю на складе и использую Google Sheets для отслеживания запасов.Добавить и вычесть несложно, но передо мной была поставлена ​​задача создания «резервной» системы:

Несколько штук запаса зарезервированы для предстоящих работ.Когда этот запас заказан и получен, количество запаса «удовлетворяется» и уменьшается на количество полученных штук.Проблема с его настройкой, аналогично функциям ADD и SUBTRACT, заключается в том, что не все полученные запасы являются «зарезервированными», а итоговые значения моего RESERVE в итоге составляют «-57», «-72», «-112» и т. Д.

У меня большой набор данных ответов формы, зарегистрированных в четырех столбцах: метка времени, идентификатор элемента №, действие (ADD, SUBTRACT или RESERVE) и QTY.То, что я ищу, - это способ создания подсчета в столбце E для каждого уникального элемента ID # с использованием значений в столбце D «QTY».Мне нужно, чтобы любое значение <0 возвращало «0». </p>

Пример листа

spreadsheet screenshot

I 'я смог создать формулу подсчета, которая удовлетворяет моим условиям для одного ID элемента за раз.Чтобы избежать создания отдельного столбца для каждого идентификатора элемента №, мне нужно выяснить, как применить его отдельно к каждому уникальному идентификатору элемента №, и распределить его по столбцу E, чтобы каждый новый ответ формы вычислялся автоматически.

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

Самым близким к решению, которое мне удалось найти, является сценарий, созданный пользователем 79865 для этого вопроса, под названием: "Запуск итогов в Google Sheets с массивом" .К сожалению, попытка вставить это в редактор скриптов Google Sheets вызывает всплывающее сообщение об ошибке: TypeError: Невозможно прочитать свойство "length" из 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;
}
...