Rata-rata dari 7 sel terakhir yang tidak kosong di Google Sheets


Jawaban:


6

Berikut ini satu pendekatan:

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

Penjelasan:

  • filter(row(D7:D), len(D7:D)) mengembalikan array yang terdiri dari nomor baris dari entri kosong dalam rentang yang diberikan.
  • large(..., 7) memilih angka terbesar ke-7 dari array ini: ini adalah nomor baris tempat Anda ingin memulai rata-rata.
  • iferror(..., row(D7))adalah perlindungan jika rentang Anda memiliki kurang dari 7 entri tidak kosong: dalam hal ini, rata-rata akan dimulai dengan D7. Saya bisa saja memasukkan "7" alih-alih row(D7), tetapi row(D7)membuat formula lebih portabel jika Anda memutuskan untuk menyalinnya di tempat lain.
  • indirect("D" & ... & ":D")membentuk kisaran untuk rata-rata, misalnya, D9:Djika output dari perhitungan sebelumnya adalah 9.
  • Akhirnya, averageapakah rata-rata. Anda dapat menempatkan fungsi agregat lainnya di sini juga.

berfungsi & pembaruan untuk perubahan baru!
— Spongebob Squarepants

Terima kasih, tapi sekarang saya pikir jawaban JPV haruslah yang diterima: itu lebih sederhana dan lebih alami secara semantik.

itu tidak diperbarui dengan benar untuk saya, saya pikir itu lebih mudah juga, tetapi begitu saya menambahkan lebih banyak nomor tidak berfungsi.
— Spongebob Squarepants

6

TL; DR

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

Contoh

masukkan deskripsi gambar di sini

Penjelasan

  • Pertama kita menghitung berapa angka dalam baris A dengan =COUNT(A:A). Sel yang berisi teks tidak akan dihitung. Teladan kita akan memberi kita9
  • Dari jumlah ini kita kurangi 7 karena Anda ingin rata-rata dari 7 nilai terakhir: =COUNT(A:A)-7. Ini akan memberi kita a 2.
  • Sekarang kita menggunakan fungsi offset untuk mendapatkan rentang kolom lengkap tetapi dengan offset 2 sel yang secara efektif berarti kita hanya memiliki bagian kolom yang tersisa dengan tepat 7 nilai tersisa

    Bayangkan sebuah kolom tanpa sel kosong sebelum sel pertama dengan nilai. Maka contoh yang disederhanakan bisa terlihat seperti =OFFSET(A:A; COUNT(A:A)-7 ;0). Tapi ini tidak akan berfungsi segera setelah kolom dimulai dengan sel kosong seperti yang ditunjukkan pada gambar di atas

  • Kita sekarang perlu memperluas offset kita dengan jumlah sel kosong. Itu tidak berarti kami menghitung semua nilai kosong dalam satu baris. Hanya yang sebelum sel non-kosong pertama.

    Anda dapat menghitungnya dengan =MATCH(TRUE;INDEX(A:A<>0);0)-1dan dapatkan 6sebagai hasil atau contoh kita

    Sekarang kami memodifikasi fungsi offset kami dan menambahkan jumlah ini untuk mendapatkan rentang yang benar yang hanya berisi 7 nilai
    OFFSET(A:A; COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1 ;0)

    masukkan deskripsi gambar di sini

  • Sebagai langkah terakhir, kami menghitung rata-rata kisaran ini. Contoh kita akan memberi kita 4 sebagai hasil karena rata-rata 1,2,3,4,5,6,7 adalah 4.
    =AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))


Jawaban yang luar biasa.
— ale

itu berfungsi dengan baik, tetapi begitu saya menambahkan sel lain, itu tidak diperbarui dengan benar?
— Spongebob Squarepants

2

Namun cara lain:

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

Penjelasan:

  1. saring semua nilai numerik
  2. balikkan kolom (sehingga nilai terakhir di atas) dengan menggunakan sort ()
  3. batasi output kolom itu hingga 7 baris (menggunakan ARRAY_CONSTRAIN)
  4. Ambil rata-rata ...

EDIT: Maaf untuk kesalahpahaman. Di atas rata-rata nilai 7 TERBESAR, bukan 7 nilai terakhir dalam kolom. Rata-rata 7 nilai terakhir solusi Normal Manusia sangat bagus. Cara alternatif dengan sedikit fungsi adalah menggunakan QUERY ()

Dengan asumsi data angka dalam kolom A, coba:

=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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.