Авто генерация серийного нет. на основе двух критериев в Google Spreadsheet

Если в столбце C есть слово «Созревший», а в D - действительная дата, то формула в столбце E должна автоматически генерировать серийный номер, на единицу больший, чем ранее существовавшие серийные номера в столбце E.

Автоматическое создание серийного номера на основе двух критериев в таблице Google

Вот ссылка на общую таблицу Google, заполненную образцами данных:

https://docs.google.com/spreadsheets/d/1XdcKbxKvIOSFK37zwULZns6giE9ounHPS5iHrRFkvIk/edit#gid=1992300894

Излишне говорить, что в разные даты статус постоянно меняется с «Ожидание» на «Завершено».


person viv227295    schedule 17.04.2017    source источник
comment
Вы можете сделать это с помощью формулы, но это всегда будет повторно назначать номера счетов-фактур, когда срок погашения предложения наступает с более ранней датой, чем одна из тех, срок погашения которых уже наступил. Так что, вероятно, сценарий - лучший вариант.   -  person Tom Sharpe    schedule 18.04.2017


Ответы (1)


Вы разрешаете всем редактировать вашу таблицу? Надеюсь, вы сделали копию.

В любом случае я написал сценарий, который должен работать. Чтобы использовать это, вы помещаете эту формулу в E2. =genSerials(C2:D10, 1, "Matured", 2, true) Второй аргумент - это столбец, содержащий статус. Третий аргумент - это текст, который должен быть в столбце состояния, за которым следует столбец для сортировки, а затем либо true, либо false, чтобы указать порядок сортировки.

function genSerials(range, statusCol, statusText, dataToSortCol, ascending) {
  statusCol -= 1; dataToSortCol -= 1;

  var sorted = range.filter(function(row) {return row[statusCol] === statusText && row[dataToSortCol] !== "";}).map(function(row) {return row[dataToSortCol];});
  if(ascending) {
    sorted.sort(function(a,b) {if(a > b) return 1; else if(b > a) return -1; else return 0;});
  } else {
    sorted.sort(function(a,b) {if(a > b) return -1; else if(b > a) return 1; else return 0;});
  }

  var result = [];
  for(var i = 0; i < range.length; i++) {
    var row = range[i];
    if(row[statusCol] === statusText && row[dataToSortCol] !== "") {
      var idx = sorted.indexOf(row[dataToSortCol]);
      result.push([idx + 1]);
    } else {
      result.push([""]);
    }
  }

  return result;
}
person SpiderPig    schedule 17.04.2017
comment
Привет, SpiderPIg Это почти сработало. Спасибо! Однако, похоже, он следует по убыванию, чего не должно быть - например, если цитата нет. 3 созрел, и, учитывая дату, сценарий правильно присваивает ему серийный номер. 5, пока все хорошо. однако после этого, если цитата нет. 2 также Mautred и имеет дату, серийный номер. 5 теперь дано цитате № 2 вырвал это из цитаты № 3 - что, очевидно, неожиданно .... извините, я надеюсь, что смогу передать то, что я пытаюсь сказать, или могу также увидеть ссылку на приведенную выше таблицу. Я поместил ur скрипт туда, чтобы проверить это. Спасибо. - person viv227295; 18.04.2017
comment
Хотите, чтобы порядковый номер располагался в том порядке, в котором созрели котировки? Для этого можно просто добавить точное время к дате. - person SpiderPig; 18.04.2017