Середнє значення останніх 7 порожніх порожніх комірок у Google Таблицях


11

У мене є цифри в діапазоні D7: D, і бувають випадки, коли деякі комірки порожні. Я хочу в середньому за останні 7 чисел, але пропускати пробіли. Тож якщо в останніх 7 є лише 3, які заповнені, я хочу, щоб це повернулося далі і знайшло 7 усього і середнє їх значення.

Відповіді:


6

Ось один підхід:

=average(indirect("D" & iferror(large(filter(row(D7:D), len(D7:D)), 7), row(D7)) & ":D"))

Пояснення:

  • filter(row(D7:D), len(D7:D)) повертає масив, що складається з номерів рядків непорожніх записів у заданому діапазоні.
  • large(..., 7) вибирає 7-е найбільше число з цього масиву: це номер рядка, з якого потрібно почати усереднення.
  • iferror(..., row(D7))є захисним засобом у випадку, якщо у вашому діапазоні менше 7 порожніх записів: у цьому випадку усереднення розпочнеться з D7. Я міг би просто поставити "7" замість row(D7), але row(D7)робить формулу більш портативною, якщо ви вирішите скопіювати її в іншому місці.
  • indirect("D" & ... & ":D")утворює діапазон для усереднення, наприклад, D9:Dякщо результат попередніх обчислень був 9.
  • Нарешті, averageчи є середній. Ви можете також розміщувати й інші сукупні функції.

працює та оновлює нові зміни!
Губка Боб Квадратні Штани

Дякую, але зараз я вважаю, що відповідь JPV має бути прийнятою: це простіше і семантично природніше.

це не було оновлено належним чином для мене, я вважав, що це теж простіше, але як тільки я додав більше цифр, це не працювало.
Губка Боб Квадратні Штани

6

TL; DR

=AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))

Приклад

введіть тут опис зображення

Пояснення

  • По- перше , ми порахувати , скільки чисел в рядку А з =COUNT(A:A). Клітини, що містять текст, не зараховуються. Наш приклад дав би нам9
  • З цього числа відняти 7 , так як ви хочете , середнє за останні 7 значень: =COUNT(A:A)-7. Це дасть нам 2.
  • Тепер ми використовуємо функцію зміщення, щоб отримати діапазон повного стовпця, але зі зміщенням двох комірок, що фактично означає, що у нас залишилася лише частина стовпця із залишком рівно 7 значень

    Уявіть стовпець без порожніх комірок перед першою коміркою зі значеннями. Тоді може виглядати спрощений приклад =OFFSET(A:A; COUNT(A:A)-7 ;0). Але це не працюватиме, як тільки стовпець починається із порожніх комірок, як показано на малюнку вище

  • Тепер нам потрібно збільшити наше зміщення на кількість порожніх комірок. Це не означає, що ми рахуємо всі порожні значення підряд. Тільки ті, що стояли перед першою не порожньою коміркою.

    Ви можете порахувати їх =MATCH(TRUE;INDEX(A:A<>0);0)-1і отримати 6результат або наш приклад

    Тепер ми змінюємо нашу функцію зміщення і додаємо цю кількість, щоб отримати правильний діапазон, що містить лише 7 значень
    OFFSET(A:A; COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1 ;0)

    введіть тут опис зображення

  • На останньому кроці ми обчислюємо середнє значення цього діапазону. Наш приклад дав би нам 4, оскільки середній показник 1,2,3,4,5,6,7 становить 4.
    =AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))


Видатна відповідь.
але

він працював нормально, але як тільки я додав іншу комірку, вона не оновлювалася належним чином?
Губка Боб Квадратні Штани

2

Ще один спосіб:

=AVERAGE(ARRAY_CONSTRAIN(SORT(FILTER(A:A, ISNUMBER(A:A)), 1, 1), 7, 1))

Пояснення:

  1. відфільтрувати всі числові значення
  2. переверніть стовпчик догори дном (щоб останні значення були вище), використовуючи sort ()
  3. обмежте вихід цього стовпця на 7 рядків (використовуючи ARRAY_CONSTRAIN)
  4. Візьміть середню ...

EDIT: Вибачте за непорозуміння. Вищезазначені середні значення НАЙБІЛЬШІ 7, а не останні 7 значень у стовпці. Для середнього оцінювання останніх 7 значень нормальне рішення людини чудово. Альтернативним способом з меншими функціями буде використання QUERY ()

Припускаючи числові дані у стовпці А, спробуйте:

=AVERAGE(QUERY(ARRAYFORMULA({ROW(A:A),A:A}),"select Col2 where Col2 is not null order by Col1 desc limit 7", 0))

0

=AVERAGE(IFERROR(QUERY(D7:D, 
 "where D is not null 
  offset "&COUNTA(QUERY(D7:D, "where D is not null", 0)) - 7, 0)))

0

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.