2016-07-08 2 views
1

Мне нужно вычислить среднее из последних 20 значений, введенных в колонке K.Вычислить среднее значение из 20 последних введенных значений без VBA

я уже узнал, что я могу найти последнее введенное значение с помощью этого:

=address(max(match(1e99; K:K)); 11; 4; 1) 

Что собирается быть моим средний конец, и я могу найти средний старт с этим:

=address(max(match(1e99; K:K))-20; 11; 4; 1) 

моим вопрос теперь в том, как я могу использовать как для создания адресов средней формулы? Это таблица ежедневно получает новые значения, поэтому адрес ячейки будет отличаться каждый день.

Например, эти две формулы будут производить: K424 и K404 соответственно.

Так что мне нужно, чтобы создать среднюю формулу, которая работает как:

=average(K404:K424) 

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

Я попытался это, но не работал:

=average((address(match(1e99; K:K))-20; 11; 4; 1)):(address(match(1e99; K:K)); 11; 4; 1))) 

Если я пытаюсь: =average((address(match(1e99; K:K))-20; 11; 4; 1))&":"&(address(match(1e99; K:K)); 11; 4; 1)))

Я получаю #VALUE

ответ

1

Вы можете объединить два INDEX функции вместе с двоеточием для правильного диапазона ячеек без необходимости использования изменчивого INDIRECT ¹ в строках, возвращаемых функцией ADDRESS.

=average(index(K:K; match(1e99; K:K)-19):index(K:K; match(1e99; K:K))) 

Это будет в среднем 20 последних строк в колонке K.

average_index


¹ Летучие функции пересчитывать каждый раз, когда что-либо в целых изменениях рабочей книги, а не только тогда, когда что-то, что влияет на их изменения результатов. Примеры летучие функции: INDIRECT, OFFSET, TODAY, NOW, RAND и RANDBETWEEN. Некоторые подфункции функций рабочего стола CELL и INFO также сделают их неустойчивыми.

+1

Отлично, но это должно быть 20, а не 19 в моем случае! Потрясающие! '= средний (индекс (K: K; match (1e99; K: K) -20): index (K: K; match (1e99; K: K)))' –

1

вы ищете = средний (...)

+0

Да, я извиняюсь, я перевел неправильно, :). –

1

Попробуйте это - при создании вложенной формулы вам нужно поддерживать строковый литерал для двоеточия.

Результаты обоих address функции должны возвращать строку, как "K404" и "K424" (или, возможно, "$K$404" и "$K$424"). Вы должны поддерживать двоеточие как часть строки, а также, например, так и использовать функцию Indirect на каскадной адресной строке:

=average(Indirect((address(match(1e99; K:K)); 11; 4; 1))&":"&(address(match(1e99; K:K))-20; 11; 4; 1)))) 
+0

Не работает, я получил #VALUE –

+0

'Средний (косвенный (...' Я буду пересматривать :) –

+0

Я был бы заинтригован, будет ли подход делать -20 более или менее эффективным, чем использование СМЕЩЕНИЯ, чтобы получить другой конец диапазона –

1

Это еще одна формула для одного и того же

{=SUM(IF(ROW(G:G)>MATCH(1E+99,G:G)-20,G:G,0))/20}

это формула массива, так что вы должны использовать CTRL-SHIFT-ENTER

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