ตาราง Pivot อย่างง่ายเพื่อนับค่าที่ไม่ซ้ำกัน


135

ดูเหมือนว่า Pivot Table จะเรียนรู้ได้ง่ายๆ ฉันต้องการนับค่าที่ไม่ซ้ำกันสำหรับค่าเฉพาะที่ฉันจัดกลุ่ม

ตัวอย่างเช่นฉันมีสิ่งนี้:

ABC   123
ABC   123
ABC   123
DEF   456
DEF   567
DEF   456
DEF   456

สิ่งที่ฉันต้องการคือตาราง Pivot ที่แสดงสิ่งนี้:

ABC   1
DEF   2

ตาราง Pivot ง่ายๆที่ฉันสร้างก็ให้สิ่งนี้แก่ฉัน (นับจำนวนแถว):

ABC   3
DEF   4  

แต่ฉันต้องการจำนวนค่าที่ไม่ซ้ำกันแทน

สิ่งที่ฉันพยายามทำจริงๆคือค้นหาว่าค่าใดในคอลัมน์แรกไม่มีค่าเดียวกันในคอลัมน์ที่สองสำหรับทุกแถว กล่าวอีกนัยหนึ่ง "ABC" คือ "ดี" "DEF" คือ "ไม่ดี"

ฉันแน่ใจว่ามีวิธีที่ง่ายกว่านี้ แต่คิดว่าจะลอง pivot table ดู ...


9
โปรดทราบว่าสำหรับ excel เวอร์ชันล่าสุดคำตอบนี้สะดวกที่สุด
Dennis Jaheruddin

คำตอบ:


108

แทรกคอลัมน์ที่ 3 และในเซลล์C2วางสูตรนี้

=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)

และคัดลอกลง ตอนนี้สร้าง Pivot ตามคอลัมน์ที่ 1 และ 3 ดูภาพรวม

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


+1 ฉันคิดว่านี่ง่ายกว่าวิธีแก้ปัญหาของฉันเล็กน้อยเพราะไม่ต้องการค่าพิเศษสำหรับแถวแรก
lc

2
เทคนิคที่ดี ฉันไม่รู้เกี่ยวกับเรื่องนี้ คุณสามารถทำสิ่งเดียวกันกับฟังก์ชันอาร์เรย์=IF(SUM((A$2:A2=A2)*(B$2:B2=B2)) > 1, 0, 1)(กด Ctrl-Shift-Enter เมื่อป้อนสูตรเพื่อให้ได้มา{}รอบ ๆ )
ErikE

คำตอบสากลไม่ต้องการคุณสมบัติเฉพาะใด ๆ สูตรธรรมดาที่ดี
Alberto De Caro

มีความคิดอย่างไรในการขยายสถานการณ์นี้ด้วยสามคอลัมน์
tumultous_rooster

13
โปรดทราบว่าคำตอบนี้จะไม่ให้คำตอบที่ถูกต้องหากคุณกรองบางแถวออกโดยใช้ตัวเลือก Pivot Table สมมติว่าแถวแรกถูกกรองออก ผลรวมของ ABC จะปรากฏเป็น 0!
jarlemag

251

อัปเดต: ตอนนี้คุณสามารถทำได้โดยอัตโนมัติด้วย Excel 2013 ฉันได้สร้างสิ่งนี้เป็นคำตอบใหม่เพราะคำตอบก่อนหน้านี้ช่วยแก้ปัญหาที่แตกต่างออกไปเล็กน้อย

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

ทำเครื่องหมายในช่องถัดจาก "เพิ่มข้อมูลนี้ในโมเดลข้อมูล"

จากนั้นเมื่อตาราง Pivot ของคุณเปิดขึ้นให้สร้างแถวคอลัมน์และค่าตามปกติ จากนั้นคลิกฟิลด์ที่คุณต้องการคำนวณจำนวนที่แตกต่างกันและแก้ไขการตั้งค่าค่าฟิลด์: แก้ไขการตั้งค่าค่าฟิลด์

สุดท้ายให้เลื่อนลงไปที่ตัวเลือกสุดท้ายแล้วเลือก 'Distinct Count' เลือกตัวเลือก "จำนวนที่แตกต่าง"

สิ่งนี้ควรอัปเดตค่าตาราง Pivot เพื่อแสดงข้อมูลที่คุณกำลังค้นหา


5
@MichaelK มันดีกว่ามากถ้าคุณมี Excel 2013
jrharshath

3
สามารถทำได้กับตาราง Pivot ที่มีอยู่ดังนั้นเราไม่จำเป็นต้องสร้างตารางมากกว่า 200 ตารางขึ้นมาใหม่เพื่อเข้าถึงฟังก์ชันการนับที่แตกต่าง
Louisa

12
เพียงแค่ FYI: หากคุณยังไม่ได้บันทึกไฟล์ของคุณเป็นไฟล์ Excel (.xlsx) (เช่นคุณเปิดไฟล์. csv) ตัวเลือกในการ "เพิ่มข้อมูลนี้ลงในโมเดลข้อมูล" จะถูกปิดใช้งาน / เป็นสีเทา . วิธีแก้ไขง่ายๆคือบันทึกไฟล์เป็นไฟล์ Excel
PonyEars

9
สิ่งนี้ไม่รองรับบน Mac หรือไม่? ตัวเลือกนี้ไม่ปรากฏสำหรับฉัน ฉันใช้เวอร์ชัน 15.27
jkupczak

4
ตัวเลือกนี้ไม่มีอยู่ในเครื่อง Mac เนื่องจากโมเดลข้อมูลโดยทั่วไปเป็นคุณลักษณะเฉพาะสำหรับ Windows เท่านั้น
Tomty

10

ฉันต้องการเพิ่มตัวเลือกเพิ่มเติมลงในส่วนผสมที่ไม่ต้องใช้สูตร แต่อาจเป็นประโยชน์หากคุณต้องการนับค่าที่ไม่ซ้ำกันภายในชุดในคอลัมน์สองคอลัมน์ที่แตกต่างกัน จากตัวอย่างเดิมฉันไม่มี:

ABC   123  
ABC   123  
ABC   123   
DEF   456  
DEF   567  
DEF   456  
DEF   456

และต้องการให้ปรากฏเป็น:

ABC   1  
DEF   2

แต่สิ่งที่ชอบมากกว่า:

ABC   123  
ABC   123  
ABC   123  
ABC   456  
DEF   123  
DEF   456  
DEF   567  
DEF   456  
DEF   456

และต้องการให้ปรากฏเป็น:

ABC  
   123    3  
   456    1  
DEF  
   123    1  
   456    3  
   567    1

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

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

เมื่อคุณเลือก 'ผลรวมการทำงานใน' แล้วให้เลือกส่วนหัวของชุดข้อมูลรอง (ในกรณีนี้จะเป็นชื่อส่วนหัวหรือคอลัมน์ของชุดข้อมูลที่มี 123, 456 และ 567) ค่านี้จะให้ค่าสูงสุดกับจำนวนรายการทั้งหมดในชุดนั้นภายในชุดข้อมูลหลักของคุณ

จากนั้นฉันก็คัดลอกข้อมูลนี้วางเป็นค่าจากนั้นวางไว้ในตาราง Pivot อื่นเพื่อจัดการได้ง่ายขึ้น

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


ฉันมีปัญหาที่แตกต่างไปจากเดิมอย่างสิ้นเชิง แต่คำตอบนี้ชี้ให้ฉันไปในทิศทางที่ถูกต้อง ขอบคุณ.
jtolle

คำตอบนี้เหมาะกับความต้องการของฉันเนื่องจากฉันมี 500,000 แถวที่ฉันต้องใช้สูตรและคอมพิวเตอร์ของฉันมีหน่วยความจำไม่เพียงพอหากฉันพยายาม ขอบคุณ!
cauldyclark

6

ฉันพบวิธีที่ง่ายที่สุดคือใช้Distinct Countตัวเลือกด้านล่างValue Field Settings( คลิกซ้ายที่ช่องในValuesบานหน้าต่าง) ตัวเลือกสำหรับDistinct Countอยู่ด้านล่างสุดของรายการ

ตำแหน่งของตำแหน่งที่จะคลิก

นี่คือก่อน (TOP; ปกติCount) และหลัง (BOTTOM; Distinct Count)

นับ

DISTINCT COUNT


3
ณ Office 2016: เพื่อให้สามารถใช้ตาราง Pivot ของฟีเจอร์นี้ได้ควรสร้างขึ้นโดยเลือก "เพิ่มข้อมูลนี้ลงในโมเดลข้อมูล"
ลีโอ


3

ไม่จำเป็นต้องจัดเรียงตารางสำหรับสูตรต่อไปนี้เพื่อส่งคืน 1 สำหรับแต่ละค่าที่ไม่ซ้ำกันปัจจุบัน

สมมติว่าช่วงตารางสำหรับข้อมูลที่นำเสนอในคำถามคือ A1: B7 ให้ป้อนสูตรต่อไปนี้ในเซลล์ C1:

=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1))

คัดลอกสูตรนั้นไปยังแถวทั้งหมดและแถวสุดท้ายจะประกอบด้วย:

=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7))

ส่งผลให้ 1 ถูกส่งคืนในครั้งแรกที่พบเรกคอร์ดและ 0 สำหรับทุกครั้งในภายหลัง

เพียงรวมคอลัมน์ในตาราง Pivot ของคุณ


2
ในกรณีที่คุณมีชุดข้อมูลขนาดใหญ่ให้ใช้=IF(COUNTIF($B$1:$B1,B1),1,0)- วิธีนี้ countif จะทำงานเพียงครั้งเดียว!
Peter Albert

2

แนวทางของฉันในการแก้ปัญหานี้แตกต่างจากที่ฉันเห็นเล็กน้อยดังนั้นฉันจะแบ่งปัน

  1. (ทำสำเนาข้อมูลของคุณก่อน)
  2. เชื่อมคอลัมน์เข้าด้วยกัน
  3. ลบรายการที่ซ้ำกันในคอลัมน์ที่ต่อกัน
  4. สุดท้าย - หมุนบนชุดผลลัพธ์

หมายเหตุ:ฉันต้องการรวมภาพเพื่อให้เข้าใจง่ายขึ้น แต่ทำไม่ได้เพราะนี่เป็นโพสต์แรกของฉัน;)


1

คำตอบของ Siddharth นั้นยอดเยี่ยมมาก

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

ตรวจสอบความเป็นเอกลักษณ์เดียว

  1. จัดเรียงตามสองคอลัมน์ (A, B ในตัวอย่างนี้)
  2. ใช้สูตรที่ดูข้อมูลน้อยลง

    =IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1) 
    

การตรวจสอบความเป็นเอกลักษณ์หลายรายการ

หากคุณต้องการตรวจสอบความเป็นเอกลักษณ์ในคอลัมน์ต่างๆคุณไม่สามารถพึ่งพาสองประเภทได้

แทน,

  1. จัดเรียงคอลัมน์เดียว (A)
  2. เพิ่มสูตรที่ครอบคลุมจำนวนระเบียนสูงสุดสำหรับแต่ละกลุ่ม ถ้า ABC อาจมี 50 แถวสูตรจะเป็น

    =IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
    

2
อีกวิธีการประมวลผลอย่างเข้มข้นอาจจะน้อยลงคือการเพิ่มคอลัมน์ C และ =A2&B2C2 แล้วเพิ่มคอลัมน์ D และ D2 =IF(MATCH(C2, C$2:C2, 0) = ROW(C1), 1, 0)ใส่ เติมทั้งสองอย่างลงไป แม้ว่าจะยังคงค้นหาตั้งแต่จุดเริ่มต้นของช่วงทั้งหมด แต่จะหยุดเมื่อพบช่วงแรกและแทนที่จะคูณค่าจาก 50,000 แถวเข้าด้วยกันเพียงแค่ค้นหาค่า - ดังนั้นควรทำงานได้ดีกว่ามาก
ErikE

@ErikE Sharp - ฉันคิดว่าเทคนิคของคุณหยุดตั้งแต่แรกพบ แต่ถ้าคุณมีค่าที่ไม่ซ้ำกันจำนวนมากใน C (ตัวอย่างเช่น 50 ABCs เท่านั้น) คุณจะตรวจสอบข้อมูลจำนวนมหาศาลต่อไป คุณสมบัติที่ยอดเยี่ยม: สูตรของคุณจะทำงานได้ดีที่สุดเมื่อข้อมูลไม่ถูกจัดเรียง
workglide

1

Excel 2013 สามารถนับจำนวนที่แตกต่างกันใน pivots หากไม่มีการเข้าถึง 2013 และมีข้อมูลจำนวนน้อยกว่าฉันจะทำสำเนาข้อมูลดิบสองชุดและในสำเนา b เลือกทั้งสองคอลัมน์และลบรายการที่ซ้ำกัน จากนั้นให้หมุนและนับคอลัมน์ของคุณ b


1

คุณสามารถใช้ COUNTIFS สำหรับหลายเกณฑ์

= 1 / COUNTIFS (A: A, A2, B: B, B2) แล้วลากลง คุณสามารถวางเกณฑ์ได้มากเท่าที่คุณต้องการ แต่มักจะใช้เวลาในการดำเนินการนาน


1

ขั้นตอนที่ 1.เพิ่มคอลัมน์

ขั้นตอนที่ 2.ใช้สูตร = IF(COUNTIF(C2:$C$2410,C2)>1,0,1)ในระเบียนที่ 1

ขั้นตอนที่ 3.ลากไปยังระเบียนทั้งหมด

ขั้นตอนที่ 4.กรอง '1' ในคอลัมน์ด้วยสูตร


0

คุณสามารถทำให้คอลัมน์เพิ่มเติมในการจัดเก็บเป็นเอกลักษณ์แล้วสรุปว่าขึ้นในตาราง Pivot ของคุณ

สิ่งที่ผมหมายถึงคือเซลล์ควรจะเสมอC1 1มือถือควรมีสูตรC2 =IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1)คัดลอกสูตรนี้ลงเพื่อให้เซลล์C3มี=IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)และอื่น ๆ

ถ้าคุณมีเซลล์ส่วนหัวคุณจะต้องการที่จะย้ายเหล่านี้ทั้งหมดลงแถวและคุณสูตรที่ควรจะเป็นC3=IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1)


0

หากคุณมีข้อมูลที่จัดเรียง .. ฉันขอแนะนำให้ใช้สูตรต่อไปนี้

=IF(OR(A2<>A3,B2<>B3),1,0)

เร็วกว่าเนื่องจากใช้เซลล์น้อยในการคำนวณ


0

ฉันมักจะจัดเรียงข้อมูลตามฟิลด์ฉันต้องนับจำนวนที่แตกต่างจากนั้นใช้ IF (A2 = A1,0,1); คุณจะได้รับ 1 ในแถวบนสุดของแต่ละกลุ่ม ID ง่ายและไม่ต้องใช้เวลาใด ๆ ในการคำนวณชุดข้อมูลขนาดใหญ่


0

คุณสามารถใช้สำหรับคอลัมน์ตัวช่วยได้เช่นVLOOKUPกัน ฉันทดสอบและดูเร็วกว่าCOUNTIF.

หากคุณกำลังใช้ส่วนหัวและข้อมูลเริ่มต้นในเซลล์A2จากนั้นในเซลล์ใด ๆ ในแถวให้ใช้สูตรนี้และคัดลอกในเซลล์อื่นทั้งหมดในคอลัมน์เดียวกัน:

=IFERROR(IF(VLOOKUP(A2;$A$1:A1;1;0)=A2;0;1);1)

-3

ฉันพบวิธีที่ง่ายกว่าในการทำเช่นนี้ อ้างถึงตัวอย่างของ Siddarth Rout หากฉันต้องการนับค่าที่ไม่ซ้ำกันในคอลัมน์ A:

  • เพิ่มคอลัมน์ใหม่ C และเติม C2 ด้วยสูตร "= 1 / COUNTIF ($ A: $ A, A2)"
  • ลากสูตรลงไปที่ส่วนที่เหลือของคอลัมน์
  • เดือยที่มีคอลัมน์ A เป็นป้ายชื่อแถวและรวม {คอลัมน์ C) ในค่าเพื่อรับจำนวนค่าที่ไม่ซ้ำกันในคอลัมน์ A

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