เซลล์สุดท้ายที่ไม่ว่างในคอลัมน์


112

มีใครทราบสูตรในการค้นหาค่าของเซลล์สุดท้ายที่ไม่ว่างเปล่าในคอลัมน์ใน Microsoft Excel หรือไม่?


ฉันกำลังมองหา VBA สำหรับสิ่งนี้
David Heffernan

คำตอบ:


76

วิธีนี้ใช้ได้กับทั้งข้อความและตัวเลขและไม่สนใจว่ามีเซลล์ว่างหรือไม่กล่าวคือจะส่งคืนเซลล์สุดท้ายที่ไม่ว่างเปล่า

ต้องป้อนอาร์เรย์หมายความว่าคุณกด Ctrl-Shift-Enter หลังจากพิมพ์หรือวางด้านล่างนี้ใช้สำหรับคอลัมน์ A:

=INDEX(A:A,MAX((A:A<>"")*(ROW(A:A))))

@ Jean-Françoisขออภัยฉันยอมรับว่าในความคิดเห็นเมื่อคืนนี้ แต่ใส่ไว้ในโพสต์ต้นฉบับโดยไม่ได้ตั้งใจ ใช้งานได้ใน XL 2007 และ 2010 ขอบคุณ
Doug Glancy

ใช้ไม่ได้กับฉันใน Excel 2007 ฉันวางสูตรที่แน่นอน ฉันมีคอลัมน์ (A) โดยที่ค่าเป็น = ROW () จนถึง 127ish และสูตรจะส่งกลับ "1"
DontFretBrett

2
@DontFretBrett อย่าลืมใส่เป็นสูตรอาร์เรย์ด้วย Ctrl-Shift-Enter ตามที่ระบุไว้ในคำตอบ
Doug Glancy

@DougGlancy ล้มเหลวในส่วนของฉัน ขอบคุณ!
DontFretBrett

1
ความแตกต่างที่สำคัญคือสิ่งนี้ส่งคืนการอ้างอิงเซลล์ (ดังนั้นจึงสามารถส่งผ่านไปยังเช่นCELL()หรือOFFSET()) ในขณะที่ยิ่งมีการโหวตมากขึ้นจะส่งคืนค่าโดยไม่บอกคุณว่าอยู่ที่ไหน
GSerg

128

ใช้สูตรง่ายๆต่อไปนี้เร็วกว่ามาก

=LOOKUP(2,1/(A:A<>""),A:A)

สำหรับ Excel 2003:

=LOOKUP(2,1/(A1:A65535<>""),A1:A65535)

จะให้ข้อดีดังต่อไปนี้:

  • มันไม่อาร์เรย์สูตร
  • มันไม่ได้ระเหยสูตร

คำอธิบาย:

  • (A:A<>"") ส่งคืนอาร์เรย์ {TRUE,TRUE,..,FALSE,..}
  • 1/(A:A<>""){1,1,..,#DIV/0!,..}ปรับเปลี่ยนอาร์เรย์นี้
  • เนื่องจากLOOKUPคาดว่าอาร์เรย์ที่เรียงลำดับจากน้อยไปหามากและคำนึงว่าหากLOOKUPฟังก์ชันไม่สามารถหาค่าที่ตรงกันได้ก็จะเลือกค่าที่มากที่สุดในlookup_range(ในกรณีของเรา{1,1,..,#DIV/0!,..}) ที่น้อยกว่าหรือเท่ากับค่า (ในกรณีของเรา2) สูตรค้นหาค่าสุดท้าย1ในอาร์เรย์และส่งกลับค่าที่สอดคล้องกันจากresult_range(พารามิเตอร์ที่สาม - A:A)

หมายเหตุเล็กน้อย - สูตรข้างต้นไม่ได้คำนึงถึงเซลล์ที่มีข้อผิดพลาด (คุณสามารถดูได้เฉพาะเมื่อเซลล์ที่ไม่ว่างสุดท้ายมีข้อผิดพลาด) หากคุณต้องการพิจารณาให้ใช้:

=LOOKUP(2,1/(NOT(ISBLANK(A:A))),A:A)

ภาพด้านล่างแสดงความแตกต่าง:

ใส่คำอธิบายภาพที่นี่


ขอบคุณสำหรับคำอธิบายและภาพสวย ๆ ยังคงมีคำถามบางข้อที่ยังคงเปิดอยู่: 1. เอกสารประกอบที่LOOKUPระบุว่าอาร์กิวเมนต์สุดท้ายresult_vectorเป็นทางเลือก อย่างไรก็ตามหากฉันมองข้ามไปฉันจะได้ผลลัพธ์ที่แปลกมากซึ่งฉันไม่เข้าใจ
Honza Zidek

2. เอกสารประกอบระบุว่า "หากLOOKUPไม่พบlookup_valueฟังก์ชันฟังก์ชันจะตรงกับค่าที่มากที่สุดlookup_vectorซึ่งน้อยกว่าหรือเท่ากับlookup_value." ถ้าฉันใช้=LOOKUP(2,A:A<>"",A:A)โดยไม่สร้าง#DIV/0!ข้อผิดพลาดโดย1/...ดูเหมือนว่าจะส่งคืนค่าบางอย่างที่อยู่ตรงกลางของ เวกเตอร์ ฉันไม่พบฟังก์ชันการทำงานที่แน่นอนในกรณีนี้
Honza Zidek

1
คำอธิบายที่ดีมาก เมื่อไม่นานมานี้ได้ตัดการคำนวณนาทีออกโดยการย้ายสูตรจากสูตรอาร์เรย์ไปยังเวอร์ชันที่ไม่ใช่อาร์เรย์ฉันพร้อมเสมอสำหรับตรรกะที่ใช้งานได้โดยไม่ต้องใช้สูตรอาร์เรย์
Tobriand

1
@Enissay ใช่อันนี้จะส่งคืนหมายเลขแถว=LOOKUP(2,1/(A:A<>""),ROW(A:A))แต่การเพิ่มROWฟังก์ชันจะเพิ่มเอฟเฟกต์ "ความผันผวน" - สูตรจะคำนวณใหม่ทุกครั้งที่เซลล์ใด ๆ ใน wroksheet เปลี่ยนแปลง
Dmitry Pavliv

1
สวัสดี. ขอบคุณสำหรับการโพสต์สิ่งนี้ เพียงแค่อยากรู้อยากเห็นผมพบว่าสูตรเดียวกันแน่นอนและเกือบถ้อยคำเดียวกันมากกว่าที่exceljet.net/formula/get-value-of-last-non-empty-cell นั่นคือคุณหรือคนอื่นด้วย? ไม่มีการเชื่อมต่อที่ชัดเจน
Solomon Rutzky

24

นี่คืออีกทางเลือกหนึ่ง: =OFFSET($A$1;COUNTA(A:A)-1;0)


9
สิ่งนี้จะใช้ไม่ได้หากมีเซลล์ที่มีค่าที่ไม่ใช่ตัวเลข (ใช้COUNTAแทนCOUNT) ไม่ต้องพูดถึงเซลล์ว่าง
Jean-François Corbett

3
ควรอยู่ด้านบนสุด มันง่ายและไม่ต้องอาศัยรายละเอียดที่คลุมเครือของฟังก์ชันที่ผิดปกติ
Tmdean

9
ไม่ควรอยู่ด้านบนสุดเพราะจะไม่ถูกต้องเมื่อผลลัพธ์มีช่องว่างฝังอยู่
Myrddin Emrys

17

แรงบันดาลใจจากผู้นำที่ยอดเยี่ยมที่ได้รับจากคำตอบของ Doug Glancy ฉันคิดวิธีทำสิ่งเดียวกันโดยไม่ต้องใช้สูตรอาร์เรย์ อย่าถามฉันว่าทำไม แต่ฉันกระตือรือร้นที่จะหลีกเลี่ยงการใช้สูตรอาร์เรย์ถ้าเป็นไปได้ (ไม่ใช่ด้วยเหตุผลใดก็ตามมันเป็นแค่สไตล์ของฉัน)

นี่คือ:

=SUMPRODUCT(MAX(($A:$A<>"")*(ROW(A:A))))

สำหรับการค้นหาแถวสุดท้ายที่ไม่ว่างโดยใช้คอลัมน์ A เป็นคอลัมน์อ้างอิง

=SUMPRODUCT(MAX(($1:$1<>"")*(COLUMN(1:1))))

สำหรับการค้นหาคอลัมน์สุดท้ายที่ไม่ว่างโดยใช้แถวที่ 1 เป็นแถวอ้างอิง

สิ่งนี้สามารถใช้เพิ่มเติมร่วมกับฟังก์ชันดัชนีเพื่อกำหนดช่วงที่ตั้งชื่อแบบไดนามิกได้อย่างมีประสิทธิภาพ แต่นี่เป็นสิ่งสำหรับโพสต์อื่นเนื่องจากไม่เกี่ยวข้องกับคำถามที่ระบุไว้ในที่นี้

ฉันได้ทดสอบวิธีการข้างต้นกับ Excel 2010 ทั้งแบบ "ดั้งเดิม" และใน "โหมดความเข้ากันได้" (สำหรับ Excel เวอร์ชันเก่า) และใช้ได้ผล อีกครั้งด้วยสิ่งเหล่านี้คุณไม่จำเป็นต้องทำ Ctrl + Shift + Enter ใด ๆ ด้วยการใช้ประโยชน์จากวิธีการทำงานของ sumproduct ใน Excel ทำให้เราสามารถรับมือกับความจำเป็นในการดำเนินการอาร์เรย์ได้ แต่เราทำได้โดยไม่ต้องใช้สูตรอาร์เรย์ ฉันหวังว่าใครบางคนอาจชื่นชอบความงามความเรียบง่ายและความสง่างามของโซลูชันการผลิตที่เสนอเหล่านี้มากพอ ๆ กับที่ฉันทำ ฉันไม่ยืนยันถึงประสิทธิภาพหน่วยความจำของโซลูชันข้างต้น เพียงแค่ว่ามันเรียบง่ายดูสวยงามช่วยให้บรรลุวัตถุประสงค์และมีความยืดหยุ่นเพียงพอที่จะขยายการใช้งานไปยังวัตถุประสงค์อื่น ๆ :)

หวังว่านี่จะช่วยได้!

ดีที่สุด!


1
ว่าทำไมใช้สูตรที่ไม่ใช่อาร์เรย์ดูคำตอบด้านล่างนี้
sancho.s ReinstateMonicaCellio

17

ฉันรู้ว่าคำถามนี้เก่า แต่ฉันไม่พอใจกับคำตอบที่ให้ไว้

  • LOOKUP, VLOOKUP และ HLOOKUP มีปัญหาด้านประสิทธิภาพและไม่ควรใช้จริงๆ

  • ฟังก์ชันอาร์เรย์มีค่าใช้จ่ายจำนวนมากและอาจมีปัญหาด้านประสิทธิภาพดังนั้นจึงควรใช้เป็นทางเลือกสุดท้ายเท่านั้น

  • COUNT และ COUNTA ประสบปัญหาหากข้อมูลไม่ติดกันไม่ว่างเปล่ากล่าวคือคุณมีช่องว่างแล้วข้อมูลอีกครั้งในช่วงที่เป็นปัญหา

  • INDIRECT มีความผันผวนดังนั้นจึงควรใช้เป็นทางเลือกสุดท้ายเท่านั้น

  • OFFSET มีความผันผวนดังนั้นจึงควรใช้เป็นทางเลือกสุดท้ายเท่านั้น

  • การอ้างอิงถึงแถวหรือคอลัมน์สุดท้ายที่เป็นไปได้ (เช่นแถวที่ 65536 ใน Excel 2003) ไม่แข็งแรงและส่งผลให้มีค่าใช้จ่ายเพิ่มเติม

นี่คือสิ่งที่ฉันใช้

  • เมื่อผสมชนิดข้อมูล: =max(MATCH(1E+306,[RANGE],1),MATCH("*",[RANGE],-1))

  • เมื่อทราบว่าข้อมูลมีเพียงตัวเลข: =MATCH(1E+306,[RANGE],1)

  • เมื่อทราบว่าข้อมูลมีเฉพาะข้อความ: =MATCH("*",[RANGE],-1)

MATCH มีค่าโสหุ้ยต่ำสุดและไม่มีความผันผวนดังนั้นหากคุณกำลังทำงานกับข้อมูลจำนวนมากสิ่งนี้ดีที่สุดที่จะใช้


นี่เป็นคำตอบที่ดี (+1) แต่ยังมีช่องโหว่บางประการที่วิธีนี้อาจพลาดได้ ตัวอย่างเช่นหากมีเซลล์ที่มีค่าตรรกะ ( TRUE/ FALSE) ก็จะตรวจไม่พบ แม้ว่าคำตอบนี้จะไม่สามารถกันกระสุนได้ แต่ฉันก็ยังคิดว่าคำตอบนี้มีผลต่อประสิทธิภาพน้อยที่สุด
ImaginaryHuman072889

2
Match ส่งคืนดัชนีไม่ใช่ค่าของเซลล์ คุณสามารถใช้ฟังก์ชันดัชนีเพื่อรับค่า นอกจากนี้คุณควรระบุบางอย่างเกี่ยวกับสิ่งที่ [RANGE] ควรจะเป็น ฉันเลือกทั้งคอลัมน์โดยใช้ "N: N" นี่คือตัวอย่างที่ได้ผลสำหรับฉัน: =INDEX(N:N,MATCH(1E+306,N:N,1))
swimfar

10

สิ่งนี้ใช้ได้ใน Excel 2003 (และใหม่กว่าด้วยการแก้ไขเล็กน้อยดูด้านล่าง) กด Ctrl + Shift + Enter (ไม่ใช่แค่ Enter) เพื่อป้อนเป็นสูตรอาร์เรย์

=IF(ISBLANK(A65536),INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535)))),A65536)

โปรดทราบว่า Excel 2003 ไม่สามารถใช้สูตรอาร์เรย์กับทั้งคอลัมน์ได้ การทำเช่นนั้นให้ผลตอบแทน#NUM!; ผลลัพธ์ที่คาดเดาไม่ได้อาจเกิดขึ้น! (แก้ไข : ข้อมูลที่ขัดแย้งกันจาก Microsoft: สิ่งเดียวกันนี้อาจเป็นจริงหรือไม่เป็นจริงเกี่ยวกับ Excel 2007 ปัญหาอาจได้รับการแก้ไขในปี 2010 )

นั่นเป็นเหตุผลที่ผมใช้สูตรอาร์เรย์ช่วงA1:A65535และให้การดูแลเป็นพิเศษไปยังเซลล์ที่ผ่านมาซึ่งเป็นA65536ใน Excel 2003 ไม่สามารถเพียงแค่พูดA:Aหรือแม้กระทั่งเป็นหลังย้อนกลับโดยอัตโนมัติA1:A65536A:A

หากคุณแน่ใจว่าA65536ว่างเปล่าคุณสามารถข้ามไฟล์IFส่วนนี้ได้:

=INDEX(A1:A65535,MAX((A1:A65535<>"")*(ROW(A1:A65535))))

โปรดทราบว่าหากคุณกำลังใช้ Excel 2007 หรือ 2010 หมายเลขแถวสุดท้ายคือ 1048576 ไม่ใช่ 65536 ดังนั้นให้ปรับค่าด้านบนตามความเหมาะสม

หากไม่มีเซลล์ว่างอยู่ตรงกลางข้อมูลของคุณฉันจะใช้สูตรที่ง่ายกว่า=INDEX(A:A,COUNTA(A:A))นี้


สำหรับ ROW แทนที่จะเป็นคอลัมน์สิ่งนี้ใช้ได้ผลสำหรับฉัน=INDEX(19:19,COUNTA(19:19))
Serj Sagan

8

โซลูชันทางเลือกที่ไม่มีสูตรอาร์เรย์ซึ่งอาจมีประสิทธิภาพมากกว่าคำตอบก่อนหน้าด้วยโซลูชัน (hint to a) ที่ไม่มีสูตรอาร์เรย์คือ

=INDEX(A:A,INDEX(MAX(($A:$A<>"")*(ROW(A:A))),0))

ดูคำตอบนี้เป็นตัวอย่าง รุ่งโรจน์เพื่อแบรดและแบร์รี่ฮูดินี่ผู้ช่วยแก้คำถามนี้

เหตุผลที่เป็นไปได้ในการเลือกใช้สูตรที่ไม่ใช่อาร์เรย์มีให้ใน:

  1. หน้าอย่างเป็นทางการของ Microsoft (มองหา "ข้อเสียของการใช้สูตรอาร์เรย์")
    สูตรอาร์เรย์อาจดูเหมือนวิเศษ แต่ก็มีข้อเสีย:

    • บางครั้งคุณอาจลืมกด CTRL + SHIFT + ENTER อย่าลืมกดคีย์ผสมนี้ทุกครั้งที่คุณป้อนหรือแก้ไขสูตรอาร์เรย์
    • ผู้ใช้รายอื่นอาจไม่เข้าใจสูตรของคุณ สูตรอาร์เรย์ค่อนข้างไม่มีเอกสารดังนั้นหากบุคคลอื่นต้องการแก้ไขเวิร์กบุ๊กของคุณคุณควรหลีกเลี่ยงสูตรอาร์เรย์หรือตรวจสอบให้แน่ใจว่าผู้ใช้เหล่านั้นเข้าใจวิธีการเปลี่ยนแปลง
    • ขึ้นอยู่กับความเร็วในการประมวลผลและหน่วยความจำของคอมพิวเตอร์ของคุณสูตรอาร์เรย์ขนาดใหญ่อาจทำให้การคำนวณช้าลง
  2. สูตรอาร์เรย์บาป


ฉันไม่สามารถทำงานกับคอลัมน์ D ได้ ฉันแทนที่Aเหตุการณ์ทั้งหมดด้วยไฟล์D. ผมทำอะไรผิดหรือเปล่า?
Marc.2377

5

หากคุณค้นหาในคอลัมน์ (A) ให้ใช้:

=INDIRECT("A" & SUMPRODUCT(MAX((A:A<>"")*(ROW(A:A)))))

หากช่วงของคุณคือ A1: A10 คุณสามารถใช้:

=INDIRECT("A" & SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10)))))

ในสูตรนี้:

SUMPRODUCT(MAX(($A$1:$A10<>"")*(ROW($A$1:$A10))))

ส่งคืนหมายเลขแถวสุดท้ายที่ไม่ว่างเปล่าและทางอ้อม () ส่งกลับค่าเซลล์



2

=MATCH("*";A1:A10;-1) สำหรับข้อมูลที่เป็นข้อความ

=MATCH(0;A1:A10;-1) สำหรับข้อมูลตัวเลข


โปรดใช้การบล็อกโค้ดเมื่อให้ข้อมูลโค้ดในคำตอบของคุณ
β.εηοιτ.βε

ฉันคิดว่าสูตรเหล่านี้จะทำให้เรามีเซลล์ที่ไม่ว่างเปล่าไม่ใช่เซลล์สุดท้ายที่ไม่ว่างเปล่า
Baodad

2

ฉันได้ลองใช้เวอร์ชันที่ไม่ลบเลือนทั้งหมดแล้ว แต่ไม่มีเวอร์ชันใดเวอร์ชันหนึ่งที่ให้ไว้ข้างต้นได้ผล .. excel 2003 / 2007update แน่นอนสิ่งนี้สามารถทำได้ใน excel 2003 ไม่ใช่อาร์เรย์หรือสูตรมาตรฐาน ฉันได้รับข้อผิดพลาดเพียงช่องว่าง 0 หรือ #value เลยใช้วิธีระเหย.. ได้ผล ..

= LOOKUP (2,1 / (T4: T369 <> ""), T4: T369)

@Julian Kroné .. การใช้ ";" แทนที่จะเป็น "," ไม่ทำงาน! ฉันคิดว่าคุณใช้ Libre Office ไม่ใช่ MS excel? LOOKUP เป็นสิ่งที่ผันผวนอย่างน่ารำคาญฉันใช้มันเป็นทางเลือกสุดท้ายเท่านั้น


0

วางรหัสนี้ในโมดูล VBA บันทึก ภายใต้ฟังก์ชันผู้ใช้กำหนดให้มองหาฟังก์ชันนี้

Function LastNonBlankCell(Range As Excel.Range) As Variant
    Application.Volatile
    LastNonBlankCell = Range.End(xlDown).Value
End Function

2
นี่ไม่จำเป็นต้องเป็นเซลล์ว่างสุดท้ายเพียงแค่เซลล์ว่างถัดไปที่เริ่มต้นที่ด้านบน
Portland Runner

คำถามเกี่ยวกับสูตรไม่ใช่ VBA
Patrick Honorez

0

สำหรับข้อมูลที่เป็นข้อความ:

EQUIV("";A1:A10;-1)

สำหรับข้อมูลตัวเลข:

EQUIV(0;A1:A10;-1)

สิ่งนี้ให้ดัชนีสัมพัทธ์ของเซลล์สุดท้ายที่ไม่ว่างในช่วงที่เลือก (ที่นี่ A1: A10)

หากคุณต้องการรับค่าให้เข้าถึงผ่านทาง INDIRECT หลังจากสร้าง -textually- การอ้างอิงเซลล์สัมบูรณ์เช่น:

INDIRECT("A" & (nb_line_where_your_data_start + EQUIV(...) - 1))

0

ฉันก็มีปัญหาเหมือนกัน สูตรนี้ก็ใช้ได้ดีไม่แพ้กัน: -

=INDIRECT(CONCATENATE("$G$",(14+(COUNTA($G$14:$G$65535)-1))))

14 เป็นหมายเลขแถวของแถวแรกในแถวที่คุณต้องการนับ

Clawtooth เรื้อรัง


0

ฉันใช้ HLOOKUP

A1มีวันที่; A2:A8มีการคาดการณ์ในช่วงเวลาที่ต่างกันฉันต้องการข้อมูลล่าสุด

=Hlookup(a1,a1:a8,count(a2:a8)+1)

สิ่งนี้ใช้สูตร hlookup มาตรฐานที่มีอาร์เรย์การค้นหาที่กำหนดโดยจำนวนรายการ


0

ถ้าคุณรู้ว่าจะไม่มีเซลล์ว่างอยู่ระหว่างนั้นวิธีที่เร็วที่สุดคือ

=INDIRECT("O"&(COUNT(O:O,"<>""")))

เพียงแค่นับเซลล์ที่ไม่ว่างเปล่าและอ้างถึงเซลล์ที่เหมาะสม

สามารถใช้สำหรับช่วงเฉพาะได้เช่นกัน

=INDIRECT("O"&(COUNT(O4:O34,"<>""")+3))

สิ่งนี้จะส่งคืนเซลล์สุดท้ายที่ไม่ว่างในช่วง O4: O34


0

สำหรับ Microsoft office 2013

"สุดท้าย แต่เป็นหนึ่ง" ของแถวที่ไม่ว่าง:

=OFFSET(Sheet5!$C$1,COUNTA(Sheet5!$C:$C)-2,0)

แถวที่ไม่ว่าง "สุดท้าย":

=OFFSET(Sheet5!$C$1,COUNTA(Sheet5!$C:$C)-1,0)

0

สูตรนี้ใช้ได้กับฉันสำหรับ office 2010:

= LOOKUP (2; 1 / (A1: A100 <> ""); A1: A100)

A1: เซลล์แรก A100: อ้างถึงเซลล์สุดท้ายในการเปรียบเทียบ


0

ฉันคิดว่าการตอบสนองจาก W5ALIVE ใกล้เคียงที่สุดกับสิ่งที่ฉันใช้เพื่อค้นหาแถวสุดท้ายของข้อมูลในคอลัมน์ สมมติว่าฉันกำลังมองหาแถวสุดท้ายที่มีข้อมูลในคอลัมน์ A ฉันจะใช้สิ่งต่อไปนี้สำหรับการค้นหาทั่วไปเพิ่มเติม:

=MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0))

MATCH แรกจะพบเซลล์ข้อความสุดท้ายและ MATCH ที่สองจะพบเซลล์ตัวเลขสุดท้าย ฟังก์ชัน IFERROR จะส่งคืนค่าศูนย์หาก MATCH แรกพบเซลล์ตัวเลขทั้งหมดหรือหากคู่ที่สองพบเซลล์ข้อความทั้งหมด

โดยทั่วไปนี่เป็นรูปแบบเล็กน้อยของโซลูชันข้อความและตัวเลขผสมของ W5ALIVE

ในการทดสอบเวลาสิ่งนี้เร็วกว่ารูปแบบ LOOKUP ที่เทียบเท่าอย่างมาก

ในการส่งคืนค่าจริงของเซลล์สุดท้ายนั้นฉันต้องการใช้การอ้างอิงเซลล์ทางอ้อมเช่นนี้:

=INDIRECT("A"&MAX(IFERROR(MATCH("*",A:A,-1),0),IFERROR(MATCH(9.99999999999999E+307,A:A,1),0)))

วิธีการที่นำเสนอโดย sancho.s อาจเป็นตัวเลือกที่สะอาดกว่า แต่ฉันจะแก้ไขส่วนที่ค้นหาหมายเลขแถวเป็น:

=INDEX(MAX((A:A<>"")*(ROW(A:A))),1)

ความแตกต่างเพียงอย่างเดียวคือ ", 1" ส่งกลับค่าแรกในขณะที่ ", 0" ส่งกลับค่าอาร์เรย์ทั้งหมด (ทั้งหมดยกเว้นค่าใดค่าหนึ่ง) ฉันยังคงชอบกำหนดที่อยู่เซลล์ไปยังฟังก์ชันดัชนีที่นั่นกล่าวอีกนัยหนึ่งคือส่งคืนค่าเซลล์ด้วย:

=INDIRECT("A"&INDEX(MAX((A:A<>"")*(ROW(A:A))),1))

กระทู้เยี่ยม!


0

หากคุณไม่กลัวที่จะใช้อาร์เรย์ต่อไปนี้เป็นสูตรง่ายๆในการแก้ปัญหา:

= SUM (IF (A: A <> "", 1,0))

คุณต้องกด CTRL + SHIFT + ENTER เนื่องจากเป็นสูตรอาร์เรย์



-1

โอเคฉันมีปัญหาเดียวกันกับผู้ถามและลองใช้คำตอบยอดนิยมทั้งสอง แต่ได้รับข้อผิดพลาดของสูตรเท่านั้น กลายเป็นว่าฉันต้องแลก "," เป็น ";" เพื่อให้สูตรทำงานได้ ฉันใช้ XL 2007

ตัวอย่าง:

=LOOKUP(2;1/(A:A<>"");A:A)

หรือ

=INDEX(A:A;MAX((A:A<>"")*(ROW(A:A))))

-3

สำหรับการติดตามเวอร์ชัน (เพิ่มตัวอักษร v ที่จุดเริ่มต้นของตัวเลข) ฉันพบว่าอันนี้ทำงานได้ดีใน Xcelsius (SAP Dashboards)

="v"&MAX(A2:A500)

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