ค่าเฉลี่ยของเซลล์ที่ไม่ว่างเปล่า 7 เซลล์ล่าสุดใน Google ชีต


11

ฉันมีตัวเลขในช่วง D7: D และมีบางครั้งที่บางเซลล์ว่างเปล่า ฉันต้องการค่าเฉลี่ยของตัวเลข 7 ตัวสุดท้าย แต่เพื่อข้ามช่องว่าง ดังนั้นถ้าใน 7 ครั้งล่าสุดมีเพียง 3 ฉบับที่เต็มฉันต้องการให้มันกลับไปอีกและหาค่าเฉลี่ยรวม 7 ค่า

คำตอบ:


6

นี่คือวิธีหนึ่ง:

=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ทำค่าเฉลี่ย คุณสามารถใส่ฟังก์ชั่นรวมอื่น ๆ ได้ที่นี่เช่นกัน

ทำงานและอัปเดตการเปลี่ยนแปลงใหม่!
Spongebob Squarepants

ขอบคุณ แต่ตอนนี้ฉันคิดว่าคำตอบของ JPV ควรเป็นคำตอบที่ยอมรับได้: มันง่ายและเป็นธรรมชาติมากกว่าความหมาย

มันไม่ได้อัปเดตอย่างถูกต้องสำหรับฉันฉันคิดว่ามันก็ง่ายขึ้นเช่นกัน แต่เมื่อฉันเพิ่มหมายเลขเข้าไปอีกก็ไม่ทำงาน
Spongebob Squarepants

6

TL; DR

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

ตัวอย่าง

ป้อนคำอธิบายรูปภาพที่นี่

คำอธิบาย

  • =COUNT(A:A)ครั้งแรกที่เรานับจำนวนตัวเลขในแถวที่มี เซลล์ที่มีข้อความจะไม่ถูกนับ ตัวอย่างของเราจะให้เรา9
  • จากหมายเลขนี้เราลบ 7 นับตั้งแต่ที่คุณต้องการเฉลี่ยของช่วง 7 =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)

    ป้อนคำอธิบายรูปภาพที่นี่

  • ในขั้นตอนสุดท้ายเราคำนวณค่าเฉลี่ยของช่วงนี้ ตัวอย่างของเราจะให้ 4 กับเราเนื่องจากค่าเฉลี่ยของ 1,2,3,4,5,6,7 คือ 4
    =AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))


คำตอบที่โดดเด่น
เบียร์

มันทำงานได้ดี แต่เมื่อฉันเพิ่มเซลล์อื่นมันไม่ได้อัปเดตอย่างถูกต้องหรือไม่
Spongebob Squarepants

2

อีกวิธีหนึ่ง:

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

explantion:

  1. กรองค่าตัวเลขทั้งหมด
  2. เปลี่ยนคอลัมน์กลับหัว (เพื่อให้ค่าสุดท้ายอยู่เหนือ) โดยใช้การเรียงลำดับ ()
  3. จำกัด ผลลัพธ์ของคอลัมน์นั้นไว้ที่ 7 แถว (โดยใช้ ARRAY_CONSTRAIN)
  4. ใช้ค่าเฉลี่ย ...

แก้ไข: ขออภัยที่เข้าใจผิด ค่าเฉลี่ยข้างต้นค่า LARGEST 7 ไม่ใช่ค่า 7 ล่าสุดในคอลัมน์ โดยเฉลี่ยแล้วค่าเฉลี่ย 7 ค่าสุดท้ายทางออกของมนุษย์ปกติดีมาก อีกทางเลือกหนึ่งที่มีฟังก์ชั่นน้อยกว่าคือใช้ QUERY ()

สมมติว่าข้อมูลตัวเลขในคอลัมน์ A ลอง:

=AVERAGE(QUERY(ARRAYFORMULA({ROW(A:A),A:A}),"select Col2 where Col2 is not null order by Col1 desc limit 7", 0))

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.