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

11

Saya memiliki angka dalam rentang D7: D dan ada kalanya beberapa sel kosong. Saya ingin rata-rata 7 angka terakhir tetapi melewatkan kosong. Jadi jika dalam 7 terakhir hanya ada 3 yang penuh, saya ingin kembali lebih jauh dan menemukan 7 total dan rata-rata keluar.

spongebob Squarepants
sumber

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.

sumber
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))

nixda
sumber
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))
JPV
sumber
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

pengguna0
sumber