Page 1 of 1
การเรียงลำดับแบบมีเงื่อนไข
Posted: Sat Oct 12, 2019 11:39 am
by tigerwit
จากไฟล์ที่แนบ ผมได้ทำ....
1. ชีท Main กรอกข้อมูลราชการครูและคะแนนประประมิน จากนั้นได้จัดลำดับโดยใช้ Rank() (F2 ถึง F20)
2. กรณีที่คะแนนเท่ากันให้เอาคนที่มีรายชื่ออยู่ก่อนมาเป็นอันดับแรก (จัดลำดับให้ H2 ถึง H20)
3. นำข้อมูลจากชีท Main มาแสดงผลในชีท AutoRank โดยเรียงลำดับอัตโนมัติ เมื่อ ค่าคะแนน ที่ชีท Main มีการเปลี่ยนแปลง
******ซึ่งในกรณีการเรียนลำดับแบบไม่แยก โรงเรียนทำได้แล้ว
ที่ต้องการคือ จัดเรียงเป็นโรงเรียน
ตามลำดับ รหัสโรงเรียนจากน้อยไปหามาก
แล้วจึงจัดเรียงคะแนนจากมากไปหาน้อย
จึงขอความอนุเคราะห์ทุกท่านช่วยด้วยครับ
Re: การเรียงลำดับแบบมีเงื่อนไข
Posted: Sat Oct 12, 2019 12:24 pm
by Bo_ry
I3
=MOD(LARGE(INDEX(-MID(Main!$D$2:$D$20,2,9)*10^9+Main!$C$2:$C$20*10^6+Main!$A$2:$A$20,),H3),10^6)
J3:M3
=VLOOKUP($I3,Main!$A$2:$E$20,COLUMNS($I3:J3),0)
Re: การเรียงลำดับแบบมีเงื่อนไข
Posted: Sat Oct 12, 2019 1:16 pm
by tigerwit
ขอบคุณครับ ติดปัญหาอีกนิดครับ
ตามสูตรที่ให้มาก หากคะแนนมีค่าเป็นจำนวนเต็มจะไม่มีปัญหา
แต่หากคะแนนมีค่าทศนิยมด้วยจะมีปัญหาครับ
แก้ไขอย่างไรครับ
รบกวนอีกครั้งครับ
I3
=MOD(LARGE(INDEX(-MID(Main!$D$2:$D$20,2,9)*10^9+Main!$C$2:$C$20*10^6+Main!$A$2:$A$20,),H3),10^6)
J3:M3
=VLOOKUP($I3,Main!$A$2:$E$20,COLUMNS($I3:J3),0)
Re: การเรียงลำดับแบบมีเงื่อนไข
Posted: Sat Oct 12, 2019 5:05 pm
by snasui

สมมุติว่ามีฟังก์ชั่น Aggregate ให้ใช้ ตัวอย่างสูตรตามด้านล่างครับ
- ที่ G3 คีย์
=SUMPRODUCT(--(E3>$E$3:$E$21))+COUNTIF(E$3:E3,E3)
Enter > Copy ลงด้านล่าง
- ที่ L3 คีย์
=INDEX($E$3:$E$21,MATCH(ROWS(L$3:L3),$G$3:$G$21,0))
Enter > Copy ลงด้านล่าง
- ที่ M3 คีย์
=VLOOKUP(L3,$E$3:$F$21,2,0)
Enter > Copy ลงด้านล่าง
- ที่ H3 คีย์
=ROWS(H$3:H3)
Enter > Copy ลงด้านล่าง
- ที่ I3 คีย์
=INDEX(B$3:B$21,AGGREGATE(15,6,(ROW($B$3:$B$21)-ROW($B$3)+1)/($D$3:$D$21=$K3)/($E$3:$E$21=$L3),COUNTIFS($K$3:$K3,$K3,$L$3:$L3,$L3)))
Enter > Copy ไป J3 > ลงด้านล่าง
Re: การเรียงลำดับแบบมีเงื่อนไข
Posted: Sat Oct 12, 2019 6:26 pm
by Bo_ry
I3
=MOD(LARGE(INDEX(-MID(Main!$D$2:$D$20,2,9)*10^9+Main!$C$2:$C$20*10^6+Main!$A$2:$A$20,),H3),10^4)
Re: การเรียงลำดับแบบมีเงื่อนไข
Posted: Sat Oct 12, 2019 8:48 pm
by tigerwit
สมมุติว่ามีฟังก์ชั่น Aggregate ให้ใช้ ตัวอย่างสูตรตามด้านล่างครับ
ที่ G3 คีย์
=SUMPRODUCT(--(E3>$E$3:$E$21))+COUNTIF(E$3:E3,E3)
Enter > Copy ลงด้านล่าง
ที่ L3 คีย์
=INDEX($E$3:$E$21,MATCH(ROWS(L$3:L3),$G$3:$G$21,0))
Enter > Copy ลงด้านล่าง
ที่ M3 คีย์
=VLOOKUP(L3,$E$3:$F$21,2,0)
Enter > Copy ลงด้านล่าง
ที่ H3 คีย์
=ROWS(H$3:H3)
Enter > Copy ลงด้านล่าง
ที่ I3 คีย์
=INDEX(B$3:B$21,AGGREGATE(15,6,(ROW($B$3:$B$21)-ROW($B$3)+1)/($D$3:$D$21=$K3)/($E$3:$E$21=$L3),COUNTIFS($K$3:$K3,$K3,$L$3:$L3,$L3)))
Enter > Copy ไป J3 > ลงด้านล่าง
สวัสดีครับ
ได้ทดลองแล้ว มีปัญหาครับ
เนื่องจากว่าผมอาจสื่อสารผิดไป
ที่ต้องการจริง คือ เรียงลำดับแบบไม่แยกโรงเรียน (ชีท AutoRank1) กรณีนี้ทำได้แล้ว
แต่กรณี เรียงลำดับแบบแยกโรงเรียน (ชีท Autorank2) นั้น
ยังทำไม่ได้ ได้รับคำแนะนำแล้วติดปัญหาตรงที่ กรณีคะแนนมีค่าเป็นเศษทศนิยมก็จะเกิดปัญหา
(ทั้งชีท AutoRank1 และ AutoRank2 ให้ดึงข้อมูลจากชีท Main มาแสดงผลครับ)
ตามไฟล์ที่แนบมาครับ
Re: การเรียงลำดับแบบมีเงื่อนไข
Posted: Sat Oct 12, 2019 9:15 pm
by snasui

ตัวอย่างสูตรตามด้านล่างครับ
- ที่ F3 คีย์
=Main!D2
Enter > Copy ไป G3 > Copy ลงด้านล่าง
- ที่ E3 คีย์
=AGGREGATE(14,6,(Main!$D$2:$D$29=$F3)*(Main!$C$2:$C$29),COUNTIF(F$3:F3,F3))
Enter > Copy ลงด้านล่าง
- ที่ C3 คีย์
=INDEX(Main!A$2:A$29,AGGREGATE(15,6,(ROW(Main!$A$2:$A$29)-ROW(Main!$A$2)+1)/(Main!$C$2:$C$29=$E3)/(Main!$D$2:$D$29=$F3),COUNTIFS($E$3:$E3,$E3,$F$3:$F3,$F3)))
Enter > Copy ไป D3 > Copy ลงด้านล่าง
Re: การเรียงลำดับแบบมีเงื่อนไข
Posted: Sun Oct 13, 2019 7:03 pm
by Bo_ry
C3
=MOD(LARGE(INDEX(-MID(Main!$D$2:$D$29,2,9)*10^12+Main!$C$2:$C$29*10^9+Main!$A$2:$A$29,),B3),10^5)
Re: การเรียงลำดับแบบมีเงื่อนไข
Posted: Tue Oct 15, 2019 9:33 am
by tigerwit
ขอบพระคุณสำหรับคำแนะนำของทุกๆท่านครับสรุปแล้วใช้
ตัวอย่างสูตรตามด้านล่างครับ
ที่ F3 คีย์
=Main!D2
Enter > Copy ไป G3 > Copy ลงด้านล่าง
ที่ E3 คีย์
=AGGREGATE(14,6,(Main!$D$2:$D$29=$F3)*(Main!$C$2:$C$29),COUNTIF(F$3:F3,F3))
Enter > Copy ลงด้านล่าง
ที่ C3 คีย์
=INDEX(Main!A$2:A$29,AGGREGATE(15,6,(ROW(Main!$A$2:$A$29)-ROW(Main!$A$2)+1)/(Main!$C$2:$C$29=$E3)/(Main!$D$2:$D$29=$F3),COUNTIFS($E$3:$E3,$E3,$F$3:$F3,$F3)))
Enter > Copy ไป D3 > Copy ลงด้านล่าง
จะได้ผลตามต้องการ ส่วนคำแนะนำจากคุณ Bo_ry ก็ใช้ได้ตามไฟล์ตัวอย่าง
แต่ถ้าหากเลขที่ตำแหน่งเปลี่ยนไปเป็นเลขมากกว่า 6 หลัก ก็จะเป็นปัญหาครับ