วิธีจัดการกับค่าที่ซ้ำกันโดยใช้ฟังก์ชั่น LARGE ()?


3

ฉันต้องการคำนวณผลลัพธ์ 3 อันดับแรกด้วยค่าที่ซ้ำกัน แต่ชื่อต่างกัน

ข้อมูลตัวอย่าง:

Name           score
A              40
B              55
C              37
D              55            

ผลลัพธ์ที่คาดหวัง:

order        score     name
1            55        B
1            55        D
3            40        A

โปรดจัดรูปแบบคำถามของคุณเพื่อให้เข้าใจได้ ใช้บล็อค CODE เพื่อเข้าสู่ตาราง และแสดงผลลัพธ์ที่คุณคาดหวังและสิ่งที่คุณได้ลองไปแล้ว
Kevin Anthony Oppegaard Rose


FYI ฉันเพิ่งอัปเดตคำตอบของฉันเพื่อแสดงวิธีการสุ่มลำดับชื่อสำหรับคะแนนที่เหมือนกัน
robinCTS

คำตอบ:


3

คุณสามารถทำสิ่งนี้ได้ด้วยตารางเดือยเช่นเดียวกับRANK()ฟังก์ชั่น

ขั้นตอนที่ 1 - เตรียมตาราง Pivot

  1. เพิ่มคอลัมน์ (เช่นใน C) ลงในข้อมูลของคุณด้วยสูตรต่อไปนี้: =RANK(B2,$B$2:$B$5)-> สิ่งนี้จะแสดงวิธีB2จัดอันดับในค่าทั้งหมดใน$B$2:$B$5

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

  1. เลือกข้อมูลของคุณ (รวมถึงคอลัมน์อันดับ) แล้วคลิกแทรก> ตาราง Pivot
  2. ใส่ฟิลด์ "คะแนน" และ "ชื่อ" เป็นแถวและฟิลด์ "คะแนน" เป็นค่าตามที่แสดง

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

  1. จัดรูปแบบตารางสาระสำคัญโดยคลิกที่รายการเมนูต่อไปนี้:

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

ตอนนี้คุณควรมีสิ่งที่คล้ายกับสิ่งนี้:

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


ขั้นตอนที่ 2 - แสดงค่า 3 อันดับแรก (วิธี A)

  1. คลิกที่ลูกศรใกล้กับเขตข้อมูลแรกของตารางสาระสำคัญ (อันดับ)
  2. เลือก "ตัวกรองค่า"
  3. เลือก "Top 10"

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

  1. ป้อน3แทนที่จะ10เป็นค่า 3 อันดับแรก

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

ตอนนี้คุณควรจะมีสิ่งนี้:

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

หมายเหตุ:ด้วยวิธีนี้หากค่าหลายค่ามีอันดับเท่ากัน (เช่นในข้อมูลตัวอย่างของคุณ) ค่าเหล่านั้นจะถูกแสดงหลายครั้ง นั่นเป็นพฤติกรรมเริ่มต้นของตารางเดือยและคุณสมบัติ "Top X"

ถ้าคุณไม่ต้องการ 4 บรรทัด แต่เพียง 3 ดูวิธี B


ขั้นตอนที่ 2 - การแสดงค่า 3 อันดับแรก (วิธี B)

  1. คลิกที่ลูกศรใกล้กับเขตข้อมูลแรกของตารางสาระสำคัญ (อันดับ)
  2. เลือก "ตัวกรองป้ายกำกับ"
  3. เลือก "น้อยกว่าหรือเท่ากับ" และป้อน3เมื่อได้รับแจ้ง

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

หมายเหตุ:ระมัดระวังด้วยวิธีนี้: หากมี 5 ค่าที่มีอันดับ 1 จะมี 5 บรรทัด ค่าสูงสุดอันดับที่ 2 จะมีอันดับที่ 6 และจะไม่ปรากฏ (มากกว่า 3) ดังนั้นมันจึงไม่ใช่ 3 อันดับแรกที่แท้จริงอีกต่อไป แต่ฉันคิดว่าวิธีการนี้ควรค่าแก่การกล่าวถึงเพราะในบางกรณีอาจใช้งานได้


เมื่อข้อมูลเปลี่ยนแปลงอย่าลืมรีเฟรชตารางเดือย!


ฉันหวังว่ามันจะทำงานตรงตามที่ฉันต้องการ! ขอบคุณมาก! อัลเลาะห์อาจอวยพรคุณและความรู้ของคุณ!
Dimah

1

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

ในการรับคะแนนในเซลล์ F3เขียนสูตรนี้และเติม 3 Row down:

=LARGE(B$3:B$6,ROWS(F$3:F3)).

ในการรับชื่อในเซลล์ G3 ให้เขียนสูตรอาร์เรย์และกรอก:

NBเสร็จสิ้นสูตรอาร์เรย์นี้ด้วย Ctrl + Shift + Enter

{=IFERROR(INDEX(A$3:A$6,SMALL(IF(B$3:B$6=F3,ROW(B$3:B$6)-ROW(F$3)+1),COUNTIF(F$3:F3,F3))),"")}

ในการรับออเดอร์ในCell E3เขียนสูตรนี้และกรอก:

=IFERROR(RANK(LARGE(B$3:B$6,ROWS(E$3:E3)),$F$3:$F$6),"")

สูตรทำงานอย่างไร:

  • สูตรใน F3 ค้นหาคะแนนสูงสุด 3 อันดับ
  • สูตรใน G3 ค้นหาชื่อสำหรับคะแนนสูงสุด 3 อันดับเปรียบเทียบคะแนนจากคอลัมน์ F กับคอลัมน์ B และดึงชื่อจากคอลัมน์ A
  • สูตรใน E3 ค้นหาอันดับ 3 คะแนนสูงสุด

สูตรในเซลล์ E3 ควรจะแทนROWS(E$3:E3) ROWS(E$3:E6)นอกจากนี้ฉันไม่เข้าใจว่าทำไมคุณไม่เขียนแค่=RANK(F3;$F$3:$F$6)E3
piko

@piko ที่จริงฉันคำนวณทุกอย่างในบริบทของคะแนน 3 อันดับแรกนั่นคือเหตุผลหลักที่ฉันคำนวณต่างกัน ดัดแปลงเป็นแถว ($ E3: E3) ,, เป็นตัวพิมพ์ผิดเท่านั้น ขอบคุณ
Rajesh S

ดีฉันแค่บอกว่าRANKฟังก์ชั่นไม่เหมือนกันมากโดยไม่จำเป็นต้องเพิ่มหรือLARGE ROWSนั่นคือความซับซ้อนที่ไม่จำเป็น
piko

@piko, ใช่, y เป็นเพียงอันดับเท่านั้นที่สามารถเขียนได้ แต่เนื่องจากฉันห่อด้วย Large ดังนั้นฉันจึงใช้แบบนั้นเท่านั้น เพื่อให้ความคล้ายคลึงกันในทั้ง 3 สูตร
Rajesh S

RajeshS ฉันเห็นด้วยกับ @piko ว่าการใช้RANK()สูตรที่ง่ายกว่านั้นดีกว่ามาก G3สูตรเป็นเรื่องยากพอสำหรับผู้ใช้มือใหม่ที่จะเข้าใจได้โดยไม่ต้องไม่จำเป็นแทรกซ้อนใด ๆ ของสูตรอื่น ๆ ฉันเห็นสิ่งที่คุณพูด (โปรดทราบว่าในขณะที่G3สูตรของคุณเป็นวิธี "มาตรฐาน" ในการทำคะแนนสูงสุด 3 อันดับและสามารถขยายได้ง่ายกว่าถึง 3 โดยเพียงกรอกลงไปสูตรของฉันง่ายกว่าสำหรับผู้เริ่มต้นที่จะเข้าใจ :-)) สูตรมันอาจจะดีกว่าถ้าIFERROR()สูตรถูกปล่อยออกไปและมีบันทึกเพิ่มอธิบาย ...
robinCTS

1

ซึ่งสามารถทำได้มีเพียงสองสูตรง่ายๆสำหรับorderและscoreคอลัมน์บวกสามเล็กน้อยที่ซับซ้อนมากขึ้นหนึ่งสำหรับnameคอลัมน์

ตั้งค่าสเปรดชีตดังต่อไปนี้:

สกรีนช็อตของสเปรดชีต

จากนั้นหลายเซลล์อาเรย์ใส่สูตรเหล่านี้ลงในช่วงที่ระบุ (จำได้ว่าจะไม่รวมรอบ{และ}):

สูตร 1 ( D2:D4):

{=RANK(E2:E4,E2:E4)}

สูตร 2 ( E2:E4):

{=LARGE(B2:B5,{1;2;3})}

สูตร 3 ( F2:F4):

{=INDEX(A:A,10^5-MOD(LARGE(10^5*B2:B5+10^5-ROW(B2:B5),{1;2;3}),10^5))}

หากต้องการเปลี่ยนจากผลลัพธ์ 3 อันดับแรกเป็นผลลัพธ์ N อันดับสูงสุดที่ N เป็นตัวเลขที่มีค่ามาก10ตัวอย่างเช่นแทนที่จะใช้อาร์เรย์แบบตายตัวสำหรับอันดับ{1;2;3;4;5;6;7;8;9;10}ให้ใช้รายการต่อไปนี้:

ROW(INDEX(X:X,1):INDEX(X:X,10))

ในขณะที่วิธีนี้ใช้ได้ผลก็คือควรแทนที่X:Xด้วยคอลัมน์ที่ป้อนสูตรด้วยวิธีนี้สูตรจะไม่แตกหากคอลัมน์Xถูกลบ

นี่เป็นทางออกที่ดีกว่าแพร่หลายมากและสั้นกว่าROW(INDIRECT("1:10"))เพราะไม่ระเหย


คำอธิบายสูตร:

สองสูตรแรกนั้นตรงไปตรงมาพอสมควร

รุ่นที่ prettified ของสูตรที่สามมีดังนี้:

=
INDEX(
  (A:A),
  10^5-
  MOD(
    LARGE(
      10^5*B2:B5+10^5-ROW(B2:B5),
      {1;2;3}
    ),
    10^5
  )
)

สูตรทำงานโดยการแก้ไขคะแนนเพื่อให้มีส่วนประกอบของดัชนีแถวสิบ จากนั้นหลังจากLARGEเลือกคะแนนที่ปรับเปลี่ยนที่เหมาะสมแล้วดัชนีจะถูกแยกและใช้INDEX()เพื่อรับชื่อที่สอดคล้องกับคะแนนที่เลือก

การก้าวผ่านสูตรF3ควรทำให้ชัดเจนยิ่งขึ้น:

  • 10^5*B2:B5
    →การ10^5*{40;55;37;55}
    →การ{4000000;5500000;3700000;5500000}ที่คะแนนลดขนาด
  • 10^5-ROW(B2:B5)
    →การ10^5-{2;3;4;5}
    →การ{99998;99997;99996;99995}สิบของส่วนประกอบของตัวเลขแถวของคะแนน
  • {4000000;5500000;3700000;5500000}+{99998;99997;99996;99995}
    {4099998;5599997;3799996;5599995}คะแนน "แก้ไข"
  • LARGE({4099998;5599997;3799996;5599995},{1;2;3})
    {5599997;5599995;4099998}ซึ่งเป็นสามอันดับแรกที่ได้รับการแก้ไข
  • 10^5-MOD({5599997;5599995;4099998},10^5)
    →การ10^5-{99997;99995;99998}
    →การ{3;5;2}ตัวเลขแถวบนสามคะแนน
  • INDEX(A:A,{3;5;2})
    →การ{B;D;A}
    →การDตั้งแต่เราอยู่ในเซลล์ที่สองของสูตรอาร์เรย์เข้าหลายเซลล์

หมายเหตุ:

  • สูตรที่ prettified ใช้งานได้จริงถ้าป้อน
  • (A:A)จะต้องใช้วงเล็บเหลี่ยมเพื่อบังคับA:Aให้ให้อยู่ในบรรทัดของตัวเอง
  • สำหรับคะแนนที่เท่ากันสูตรจะส่งคืนชื่อในลำดับแถวจากน้อยไปหามาก สูตรสามารถปรับเปลี่ยนเพื่อส่งคืนชื่อตามลำดับจากมากไปน้อยโดยใช้หมายเลขแถวธรรมดาแทนส่วนเติมเต็มของหมายเลขแถวสิบเมื่อปรับเปลี่ยนคะแนน:
{=INDEX(A:A,MOD(LARGE(10^5*B2:B5+ROW(B2:B5),{1;2;3}),10^5))}
  • มันเป็นไปได้ที่จะสุ่มลำดับของคะแนนที่เหมือนกันโดยการสร้างคะแนนที่แก้ไขด้วยตัวเลขสุ่มระหว่างคะแนนและหมายเลขแถว

เฮ้คุณ ... สูตรดัชนี {= INDEX (A: A, MOD (ขนาดใหญ่ (10 ^ 5 * B2: B5 + ROW (B2: B5), {1; 2; 3}), 10 ^ 5))} ไม่ทำงาน! มันทำให้ฉันมีเซลล์ว่าง แต่เมื่อฉันคลิกที่มันสูตรจะปรากฏบนแถบสูตร ฉันกด Ctrl + shift + enter ตารางเดือยทำงาน ขอบคุณมาก แต่ฉันสนใจสูตรดัชนี .... ฉันต้องการความช่วยเหลือ
Dimah

@Dimah ขออภัย {และ}เป็นเพียงมีเพื่อเตือนคุณว่าสูตรจะต้องมีอาร์เรย์เข้า คุณต้องไม่คัดลอกหรือลบออกเมื่อคุณวางสูตร ดังนั้นด้วยเซลล์B2:B5เลือกและB2ใช้งานป้อน=INDEX(A:A,10^5-MOD(LARGE(10^5*B2:B5+10^5-ROW(B2:B5),{1;2;3}),10^5))เข้ามาB2แล้วกดCtrl+ +Shift Enter(ในการเข้าสู่สูตรและยังคงใช้งานการเลือกอยู่ให้คลิกในแถบสูตรที่ด้านบนของหน้าจอและวางสูตรที่นั่น)
robinCTS
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.