답변:
한 가지 방법이 있습니다.
=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
평균을 수행합니다. 다른 집계 함수도 여기에 넣을 수 있습니다.=AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))
=COUNT(A:A)
. 텍스트가 포함 된 셀은 계산되지 않습니다. 우리의 예는 우리에게 줄 것입니다9
=COUNT(A:A)-7
. 이것은 우리에게을 줄 것이다 2
.이제 오프셋 함수를 사용하여 전체 열의 범위를 얻지 만 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)
마지막 단계로이 범위의 평균을 계산합니다. 이 예에서는 평균 1,2,3,4,5,6,7이 4이므로 결과는 4입니다.
=AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))
또 다른 방법 :
=AVERAGE(ARRAY_CONSTRAIN(SORT(FILTER(A:A, ISNUMBER(A:A)), 1, 1), 7, 1))
외식 :
편집 : 오해 죄송합니다. 위의 값은 열의 마지막 7 개 값이 아니라 가장 최근의 7 개 값입니다. 마지막 7 개의 값을 평균화하려면 Normal Human의 솔루션이 좋습니다. 기능이 적은 다른 방법은 QUERY ()를 사용하는 것입니다.
A 열의 숫자 데이터를 가정하면 다음을 시도하십시오.
=AVERAGE(QUERY(ARRAYFORMULA({ROW(A:A),A:A}),"select Col2 where Col2 is not null order by Col1 desc limit 7", 0))