Trung bình của 7 ô không trống cuối cùng trong Google Sheets


Câu trả lời:


6

Đây là một cách tiếp cận:

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

Giải trình:

  • filter(row(D7:D), len(D7:D)) trả về một mảng bao gồm các số hàng của các mục không trống trong phạm vi đã cho.
  • large(..., 7) chọn số lớn thứ 7 từ mảng này: đây là số hàng mà bạn muốn bắt đầu tính trung bình.
  • iferror(..., row(D7))là một biện pháp bảo vệ trong trường hợp phạm vi của bạn có ít hơn 7 mục không trống: trong trường hợp này, tính trung bình sẽ bắt đầu với D7. Tôi có thể chỉ cần đặt "7" thay vì row(D7), nhưng row(D7)làm cho công thức dễ mang theo hơn trong trường hợp bạn quyết định sao chép nó ở nơi khác.
  • indirect("D" & ... & ":D")hình thành phạm vi để tính trung bình, ví dụ: D9:Dnếu đầu ra của tính toán trước là 9.
  • Cuối cùng, averagelàm trung bình. Bạn cũng có thể đặt các hàm tổng hợp khác ở đây.

hoạt động & cập nhật những thay đổi mới!
SpPal Squarepants

Cảm ơn, nhưng bây giờ tôi nghĩ câu trả lời của JPV nên được chấp nhận: nó đơn giản và tự nhiên hơn về mặt ngữ nghĩa.

nó không cập nhật đúng cho tôi, tôi nghĩ nó cũng dễ hơn nhưng một khi tôi thêm nhiều số thì nó không hoạt động.
SpPal Squarepants

6

TL; DR

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

Thí dụ

nhập mô tả hình ảnh ở đây

Giải trình

  • Đầu tiên chúng ta đếm có bao nhiêu số trong hàng A với =COUNT(A:A). Các ô chứa văn bản sẽ không được tính. Ví dụ của chúng tôi sẽ cho chúng ta9
  • Từ con số này, chúng tôi trừ đi 7 vì bạn muốn trung bình của 7 giá trị cuối cùng : =COUNT(A:A)-7. Điều này sẽ cho chúng ta a 2.
  • Bây giờ chúng tôi sử dụng hàm offset để lấy phạm vi của một cột hoàn chỉnh nhưng với độ lệch là 2 ô, điều đó có nghĩa là chúng tôi chỉ còn lại một phần của cột với đúng 7 giá trị

    Tưởng tượng một cột không có ô trống trước ô đầu tiên có giá trị. Sau đó, một ví dụ đơn giản hóa có thể trông như thế nào =OFFSET(A:A; COUNT(A:A)-7 ;0). Nhưng điều này sẽ không hoạt động ngay khi cột bắt đầu với các ô trống như trong hình trên

  • Bây giờ chúng ta cần mở rộng phần bù của mình bằng số ô trống. Điều đó không có nghĩa là chúng tôi đếm tất cả các giá trị trống trong một hàng. Chỉ là những cái trước ô không trống đầu tiên.

    Bạn có thể đếm chúng với =MATCH(TRUE;INDEX(A:A<>0);0)-1và lấy 6kết quả hoặc ví dụ của chúng tôi

    Bây giờ chúng tôi sửa đổi hàm bù của chúng tôi và thêm số này để có phạm vi chính xác chỉ chứa 7 giá trị
    OFFSET(A:A; COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1 ;0)

    nhập mô tả hình ảnh ở đây

  • Bước cuối cùng, chúng tôi tính toán trung bình của phạm vi này. Ví dụ của chúng tôi sẽ cho chúng ta 4 kết quả vì trung bình 1,2,3,4,5,6,7 là 4.
    =AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))


Câu trả lời nổi bật.
ale

nó hoạt động tốt, nhưng một khi tôi thêm một ô khác, nó không cập nhật đúng không?
Spob Squarepants

2

Một cách khác:

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

Giải thích:

  1. lọc ra tất cả các giá trị số
  2. lật ngược cột (để các giá trị cuối cùng ở trên) bằng cách sử dụng sort ()
  3. giới hạn đầu ra của cột đó thành 7 hàng (sử dụng ARRAY_CONSTRAIN)
  4. Lấy trung bình ...

EDIT: Xin lỗi vì sự hiểu lầm. Trên đây tính trung bình các giá trị LARGEST 7, không phải 7 giá trị cuối cùng trong một cột. Để tính trung bình 7 giá trị cuối cùng, giải pháp của Người bình thường là tuyệt vời. Một cách khác với ít chức năng hơn là sử dụng QUERY ()

Giả sử dữ liệu số trong cột A, hãy thử:

=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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.