ฉันมีตัวเลขในช่วง D7: D และมีบางครั้งที่บางเซลล์ว่างเปล่า ฉันต้องการค่าเฉลี่ยของตัวเลข 7 ตัวสุดท้าย แต่เพื่อข้ามช่องว่าง ดังนั้นถ้าใน 7 ครั้งล่าสุดมีเพียง 3 ฉบับที่เต็มฉันต้องการให้มันกลับไปอีกและหาค่าเฉลี่ยรวม 7 ค่า
ฉันมีตัวเลขในช่วง D7: D และมีบางครั้งที่บางเซลล์ว่างเปล่า ฉันต้องการค่าเฉลี่ยของตัวเลข 7 ตัวสุดท้าย แต่เพื่อข้ามช่องว่าง ดังนั้นถ้าใน 7 ครั้งล่าสุดมีเพียง 3 ฉบับที่เต็มฉันต้องการให้มันกลับไปอีกและหาค่าเฉลี่ยรวม 7 ค่า
คำตอบ:
นี่คือวิธีหนึ่ง:
=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
ถ้าผลลัพธ์ของการคำนวณก่อนหน้าคือ 9average
ทำค่าเฉลี่ย คุณสามารถใส่ฟังก์ชั่นรวมอื่น ๆ ได้ที่นี่เช่นกัน=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)
ในขั้นตอนสุดท้ายเราคำนวณค่าเฉลี่ยของช่วงนี้ ตัวอย่างของเราจะให้ 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))
อีกวิธีหนึ่ง:
=AVERAGE(ARRAY_CONSTRAIN(SORT(FILTER(A:A, ISNUMBER(A:A)), 1, 1), 7, 1))
explantion:
แก้ไข: ขออภัยที่เข้าใจผิด ค่าเฉลี่ยข้างต้นค่า 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))
=AVERAGE(IFERROR(QUERY(D7:D,
"where D is not null
offset "&COUNTA(QUERY(D7:D, "where D is not null", 0)) - 7, 0)))