วิธีการนับจำนวนของค่าที่แตกต่างในช่วง?


32

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

ไม่มีฟังก์ชั่น=COUNTDISTINCT(A2:A100)ดังนั้นฉันควรทำอย่างไรดี? (Excel 2003)

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

คำตอบ:


31
=SUMPRODUCT((A2:A100 <> "")/COUNTIF(A2:A100,A2:A100 & ""))

จะทำโดยไม่ต้องใช้สูตรอาเรย์


4
ทำงานอย่างไร / ทำไม ???
RBarryYoung

4
@RarryYoung, SUMPRODUCT ทำงานเหมือนฟังก์ชั่น Array โดยที่ไม่ต้องเป็นหนึ่งเดียว ในขณะที่มันสามารถทำได้มากกว่าสิ่งที่มันถูกใช้สำหรับที่นี่ที่นี่มันเป็นเพียงการตรวจสอบทุกอินสแตนซ์ของคอลัมน์และมากับค่าที่ปรับขนาดสำหรับแต่ละค่าที่แตกต่างกันขึ้นอยู่กับจำนวนการทำซ้ำในคอลัมน์ ดังนั้นหากมีสองอินสแตนซ์ของ 'a' มันจะเพิ่ม 1/2 และ 1/2 เพื่อให้ได้ 1 ดังนั้นสำหรับทุกค่าที่แตกต่างคุณจะบวกหนึ่งเข้าไปในผลรวม
Lance Roberts

1
นี่คือส่วนที่ฉันมีปัญหากับ: " การหาค่าที่ปรับขนาดสำหรับแต่ละค่าที่แตกต่างกันตามจำนวนการวนซ้ำในคอลัมน์ " ถ้าฉันเข้าใจสิ่งนี้ SUMPRODUCT จะดำเนินการลูปอย่างfor each [i] in A2:A100 DO:{ sum += (([i]<>"")/COUNTIF(A2:A100,[i])) }ถูกต้อง ? ฉันมีปัญหาเล็กน้อยในการทำความเข้าใจว่าจะรู้วิธีระบุทั้งพารามิเตอร์ตามเงื่อนไขและพารามิเตอร์ COUNTIF ที่สอง แต่ไม่ใช่พารามิเตอร์ที่ 1 COUNTIF ใช่หรือไม่ DWIM-magic มีเอกสาร / อธิบายที่ใดก็ได้โดย MS หรือไม่ มันคงจะดีถ้าได้รู้วิธีการเขียนสิ่งเหล่านี้อย่างตั้งใจ
RBarryYoung

1
ใช่คุณได้รับมันจะทำซ้ำอาร์เรย์สำหรับสิ่งที่ปกติจะเป็นค่าเดียวคูณพารามิเตอร์ทั้งหมดของมัน (ซึ่งในกรณีนี้เป็นเพียง 1) จากนั้นเพิ่มการทำซ้ำ SUMPRODUCTs นั้นซับซ้อนมาก แต่มันเป็นหนึ่งในฟังก์ชันที่มีประโยชน์ที่สุดใน Excel มันสามารถทำปาฏิหาริย์ได้
Lance Roberts

4
สิ่งนี้จะล้มเหลวหากอินพุตมีรายการว่าง แก้ไขได้ง่ายเป็น demoed บนYouTube=SUMPRODUCT((A2:A100<>"")/COUNTIF(A2:A100,A2:A100&""))คือ: มันทำให้มั่นใจได้ว่าจะCOUNTIFไม่ส่งคืน 0 สำหรับบรรทัดว่างซึ่งจะส่งผลให้เกิดDIV/0ข้อผิดพลาด
cfi

7

ฉันพบวิธีแก้ปัญหาที่นี่ซึ่งดูเหมือนจะเป็นวิธีการแก้ปัญหาที่ไม่น่าเชื่อ แต่เฮ้มันใช้งานได้ ...

= SUM (IF (COUNTIF (A2: A100, A2: A100) = 0, "", 1 / COUNTIF (A2: A100, A2: A100)))

และกดCtrl+ +Shift Enterการกดเพียงครั้งเดียวEnterจะให้ผลที่ผิด


ฉันชอบที่จะเห็นคำตอบอื่น ๆ ! มีวิธีที่ดีกว่านี้เพื่อแก้ปัญหา?
Torben Gundtofte-Bruun

1
ไม่นั่นเป็นวิธีที่ดีที่สุด ฉันไม่แน่ใจว่าทำไมถ้ามีนั่น คุณสามารถใช้อาร์เรย์ = SUM (1 / COUNTIF (A2: A100, A2: A100))
dkusleika

2
@dkusleika IF ดูเหมือนว่าอยู่ที่นั่นเพื่อป้องกันการหารด้วยศูนย์ข้อผิดพลาด ตามที่กล่าวไว้ในหน้าเชื่อมโยงกับด้านบนสิ่งนี้จำเป็นถ้าช่วงนั้นมีเซลล์ว่างเปล่ามิฉะนั้นคุณสามารถปล่อย IF ออกได้
Bavi_H


1

บทความนี้แสดงสิ่งนี้สำหรับค่าข้อความ:

=SUM(IF(FREQUENCY(IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""), IF(LEN(C3:C25)>0,MATCH(C3:C25,C3:C25,0),""))>0,1))

และนี่สำหรับค่าตัวเลข:

=SUM(IF(FREQUENCY(C3:C25, C3:C25)>0,1))

บทความนี้แสดงสูตรที่คล้ายกัน แต่ยังแสดงวิธีการใช้ตัวกรอง

นับจำนวนค่าที่ไม่ซ้ำกันโดยใช้ตัวกรอง

คุณสามารถใช้ตัวกรองขั้นสูงเพื่อแยกค่าที่ไม่ซ้ำจากคอลัมน์ข้อมูลและวางลงในตำแหน่งใหม่ จากนั้นคุณสามารถใช้ฟังก์ชัน ROWS เพื่อนับจำนวนรายการในช่วงใหม่

  1. ตรวจสอบให้แน่ใจว่าแถวแรกในคอลัมน์มีส่วนหัวคอลัมน์
  2. บนเมนูข้อมูลชี้ไปที่ตัวกรองแล้วคลิกตัวกรองขั้นสูง
  3. ในกล่องโต้ตอบตัวกรองขั้นสูงคลิกคัดลอกไปยังตำแหน่งอื่น
  4. หากยังไม่ได้เลือกช่วงที่คุณกำลังนับให้ลบข้อมูลใด ๆ ในกล่องช่วงรายการแล้วคลิกคอลัมน์ (หรือเลือกช่วง) ที่มีข้อมูลของคุณ
  5. ในกล่องคัดลอกไปยังลบข้อมูลใด ๆ ในกล่องหรือคลิกในกล่องจากนั้นคลิกคอลัมน์ว่างที่คุณต้องการคัดลอกค่าที่ไม่ซ้ำกัน
  6. เลือกกล่องกาเครื่องหมายเฉพาะระเบียนที่ไม่ซ้ำกันแล้วคลิกตกลง

    ค่าที่ไม่ซ้ำจากช่วงที่เลือกจะถูกคัดลอกไปยังคอลัมน์ใหม่

  7. ในเซลล์ว่างใต้เซลล์สุดท้ายในช่วงให้ป้อนฟังก์ชัน ROWS ใช้ช่วงของค่าที่ไม่ซ้ำกันซึ่งคุณเพิ่งคัดลอกมาเป็นอาร์กิวเมนต์ ตัวอย่างเช่นหากช่วงของค่าที่ไม่ซ้ำคือ B1: B45 ให้ป้อน:
    = ROWS (B1: B45)


1

= SUM (1 / COUNTIF (A2: A100; A2: A100))

ยืนยันด้วย Ctrl + Shift + Enter

สำหรับแต่ละเซลล์จะนับจำนวนครั้งที่มันเกิดขึ้นและเรียกค่าผกผันของค่าเหล่านี้ทั้งหมด สมมติว่าสตริงหรือตัวเลขบางครั้งเกิดขึ้น 5 ครั้ง ค่าอินเวอร์สคือ 0.2 ซึ่งได้ผลรวม 5 ครั้งดังนั้นเพิ่ม 1 ในที่สุดมันก็ให้จำนวนของค่าที่แตกต่างกัน

หมายเหตุ: ไม่ทำงานเมื่อเกิดช่องว่าง!


0

ลองลิงค์นี้ สิ่งนี้แสดงวิธีการนับค่าที่ไม่ซ้ำในรายการที่เว้นเซลล์ว่าง

http://www.functioninexcel.com/lists-arrays/count-unique-values-in-a-list/

= ผลรวม (ถ้า (ความถี่ (จับคู่ (รายการ, รายการ, 0)), จับคู่ (รายการ, รายการ, 0))> 0, 1)

โดยที่ "List" เป็นช่วงเซลล์ของคุณเช่น:

รายการ = $ A $ 2: $ A $ 12 OR- รายการ = ชดเชย ($ A $ 1 ,,, การจับคู่ (rept ("z", 255), $ A: $ A)) - หรือ - รายการ = ชดเชย ($ A $ 1, ,, จับคู่ (ค่า (ตอบกลับ ("9", 255)), $ A: $ A))


0

= SUM (IF (ความถี่ (IF (SUBTOTAL (3, OFFSET (A2: A100, ROW (A2: A100) -ROW (A2), 0,1)), MATCH ( "~" และ A2: A100, A2: A100 &" ", 0)), ROW (A2: A100) -ROW (A2) +1), 1))

อย่าลืมกดปุ่ม CONTROL + SHIFT + ENTER หลังจากวางสูตรนี้แล้ว นี่คือช่วงของ A2: A100 ปรับช่วงตาม

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