Как рассчитать сумму последних 7 строк для каждой строки внутри ArrayFormula? - PullRequest
1 голос
/ 22 января 2020

У меня есть столбец D с числовыми значениями, а в соседнем столбце я хочу отобразить сумму за последние 7 строк относительно текущей строки.

Я пробовал пару вариантов, большинство из которых были вдохновлены StackOverflow и другими сайтами, но они не работали так, как мне нужно.

Я подумал, что поскольку Offset () создает range было бы просто "нарезать" нужный мне диапазон и передать его в sum ()

ArrayFormula( Sum(Offset(D7:D500,-6,1,7,1)) )

Однако, похоже, что он вычисляет только ячейку, в которую я помещаю эту формулу в.

Я адаптировал потенциальное решение, которое я нашел в Интернете, к моей ситуации

ArrayFormula(SUMIF(ROW(D7:D500),"<="&ROW(D7:D500),D7:D500))

Это вычисляет сумму для всех предыдущих строк, поэтому я решил использовать SUMIFS () даст мне то, что мне нужно, поэтому

=ArrayFormula(SUMIFS(D7:D500, ROW(D7:D500),"<="&ROW(D7:D500), ROW(D7:D500),">"&ROW(D7:D500)-7))

Но этот просто не работает. Я также пытался создать диапазон с помощью Address () и Interpret (), но кажется, что они не работают должным образом внутри ArrayFormula ()

Я довольно новичок в этом, так что, возможно, я Я не использую их должным образом. Что я здесь не так делаю? Есть ли лучший способ сделать это? Я бы предпочел использовать ArrayFormula (), если это возможно, так как формула будет жить в одной ячейке.

Ответы [ 3 ]

0 голосов
/ 22 января 2020

попробовать:

=SUM(IFERROR(QUERY(D7:D500, "limit 7 offset "&COUNTA(D7:D500)-7)))

0

0 голосов
/ 22 января 2020

Вы можете выполнить sh с помощью пользовательской функции , созданной в скрипте Google Apps. Для этого выполните следующие действия:

  • В вашей электронной таблице выберите Инструменты> Редактор скриптов , чтобы открыть скрипт, связанный с вашим файлом.
  • Скопируйте эту функцию в редакторе сценариев и сохраните проект:
function SUM7ROWS(input) {
  var output = [];
  var sum;
  for (var row = 0; row < input.length; row++) {
    sum = 0;
    for (var i = 6; i >= 0; i--) {
      if (row - i >= 0) {
        sum = sum + Number(input[row - i]);
      }
    }
    output.push(sum);
  }
  return output;
}
  • Теперь, если вы go вернетесь к своей электронной таблице, вы можете использовать эту функцию так же, как и с любой другой функция. Вам просто нужно указать соответствующий диапазон в качестве параметра (в данном случае это будет D7:D500), как вы можете видеть здесь:

enter image description here

Надеюсь, это поможет.

0 голосов
/ 22 января 2020

метод 1. OFFSET функция

COUNT(D7:D500)-7 сообщает EXCEL, сколько ячеек должно быть уменьшено с D7.

=SUM(OFFSET(D7:D500,COUNT(D7:D500)-7,,7,1))

нет Ctrl + Shift + Enter

метод 2. Index функция

Если вы касаетесь волатильности OFFSET функцию, вы можете попробовать

=SUM(INDEX(D7:D500,COUNT(D7:D500)-6):INDEX(D7:D500,COUNT(D7:D500)))

нет Ctrl + Shift + Enter

...