2015-10-04 2 views
0

Так что я эта функция здесь, которая проходит через T2: T:Как преобразовать эту функцию в функцию массива?

=IF($D$29<$N2,"", AVERAGE(INDIRECT("P"&IF($N2<11, 2,$N2-5)&":P"&$N2+5))) 

Колонок Р представляет собой список номеров, начиная со строкой 2. Колонка N является индексом (идет вверх на 1 каждую строку), который начинается строка 2 и заканчивается, где P заканчивается + 14, а D29 - просто число. В моей текущей ситуации P заканчивается в строке 11 и N заканчивается в строке 25. И я пытаюсь изменить ее на формулу массива, чтобы при добавлении новых строк она автоматически обновлялась. Поэтому после его изменения я получил следующее:

=ARRAYFORMULA(IF($D$29<$N2:N,"", AVERAGE(INDIRECT("P"&IF($N2:N<11, 2,$N2:N-5)&":P"&$N2:N+5)))) 

Однако, он не работает должным образом. Он по-прежнему занимает одинаковое количество строк, но каждая строка имеет одинаковое значение. Значение первой строки изначально. Как я могу исправить эту проблему? Благодаря!

ответ

0

Проблема в том, что ARRAYFORMULA не работает с AVERAGE. Но вы всегда можете использовать javascript. Откройте редактор сценариев и вставьте этот код.

function avg(nums, d) { 
    var r = [], 
     i, j, start, end, avg, count; 
    for(i = 0; i < nums.length; i++) { 
    if(d <= i) r.push([""]); 
    else { 
     if(i < 10) start = 0; 
     else start = i - 5; 
     end = i + 4; 
     avg = 0, count = 0; 
     for(j = start; j <= end; j++) { 
     if(nums[j]) { 
      avg += nums[j][0]; 
      count++; 
     } 
     } 
     r.push([avg/count]); 
    } 
    } 
    return r; 
} 

Сохранить его, вернитесь в таблицу и поместить эту формулу в любую ячейку =avg(P2:P11, D29)

+0

Спасибо! Я не думал просто не использовать формулу массива. Я даже создал другой скрипт, который не работал. – SwissAndOr

+0

Я обнаружил, что ваша функция не работает, когда я расширяю P, однако следующее должно исправить это: = avg (НЕПРЯМЫЕ («P2: P» & (COUNTIF (P2: P, «<> 0») + 1)), D29) – SwissAndOr

Смежные вопросы