Page 1 of 1

ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Aug 01, 2016 7:02 pm
by nengba
รบกวนถามสูตรการดึงเอาข้อมูลที่ซ้ำกันในคอลัมน์เดียวกัน ไปแสดงผลในอีกคอลัมน์หนึ่งเพียงอันเดียว ตามตัวอย่างในไฟล์แนบครับ...

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Aug 01, 2016 8:21 pm
by snasui
:D ตัวอย่างสูตรครับ

เซลล์ D4 คีย์

=IFERROR(INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))),"")

Ctrl+Shift+Enter > Copy ลงด้านล่าง

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Aug 01, 2016 8:43 pm
by nengba
ยังไม่ได้ครับอาจารย์

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Aug 01, 2016 8:45 pm
by snasui
:D แนบไฟล์ที่บอกว่าไม่ได้มาด้วยครับ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Aug 01, 2016 8:50 pm
by nengba
ตามนี้ครับ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Aug 01, 2016 8:57 pm
by snasui
:o ผมอ้างอิง Range ผิดไป 1 เซลล์

ด้านล่างนี้ปรับสูตรมาใหม่เพื่อไม่รวมเซลล์ว่างครับ

=IFERROR(INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(IF($C$4:$C$21<>"",MATCH($C$4:$C$21,$C$4:$C$21,0)),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))),"")

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Aug 01, 2016 9:03 pm
by nengba
ตามต้องการเลยครับอาจารย์... ขอบพระคุณครับ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Sat Mar 21, 2020 5:03 pm
by ksnironk
ลองคีย์ค่าที่ซ้ำเพิ่มไปในไฟล์ตัวอย่าง แต่ก็ยังแสดงค่าซ้ำอีก จริงๆอยากให้แสดงแค่ค่าเดียว ต้องทำยังไงคะ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Sat Mar 21, 2020 5:09 pm
by snasui
:D แนบไฟล์นั้นมาใหม่ ชี้ให้เห็นว่าเกิดปัญหาใด จะได้ตอบต่อไปจากนั้นครับ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Sat Mar 21, 2020 5:32 pm
by ksnironk
ทำได้แล้วค่ะ แต่ว่าทำยังไงไม่ให้แสดง 0 ถ้าสิ้นสุดค่าซ้ำแล้วค่ะ :D

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Sat Mar 21, 2020 5:36 pm
by snasui
:D ตัวอย่างการปรับสูตรที่เซลล์ D4 ครับ

=IFERROR(INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(IF($C$4:$C$21<>"",MATCH($C$4:$C$21,$C$4:$C$21,0)),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))),"")

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Mar 23, 2020 10:08 am
by ksnironk
ได้แล้วค่ะ ขอบคุณมากค่ะ :D

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Mar 23, 2020 6:18 pm
by Totem
:D เรียนอาจารย์และเพื่อนสมาชิกทุกคน
จากที่คุณ ksnironk ถามไว้และได้คำตอบแล้ว
แต่ขอคำถามเพิ่มเติมในกรณีหาค่าซ้ำหรือไม่ซ้ำกัน ในแสดงออกเพียงรายการเดียว แต่มีเงือนไขมากกว่าเดิมเป็น 2 คอลัมน์ คือ
จากข้อมูลใน คอลัมน์ C และ E ให้แสดงค่าซ้ำหรือไม่ซ้ำเพียงค่าเดียว แต่ให้พิจารณาที่ไม่ใช่ BBBB ในคอลัมน์ C และในคอลัมน์ E ที่ระบายสีไว้ ก็พิจารณาได้ค่าไม่ซ้ำด้วย
จะได้ AAAA ในคอลัมน์ F และ 1234 ในคอลัมน์ G ลงมา เป็นต้น
ซึ่งในคอลัมน์ E อาจมีซ้ำมากกว่า 2 รายการก็ได้ ที่แสดงไว้เป็นเพียงตัวอย่างครับ

ขอบคุณครับ

สูตร Excel - แสดงค่าซ้ำเพียงค่าเดียว.xlsx

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Mon Mar 23, 2020 7:59 pm
by snasui
:D ตัวอย่างสูตรตามด้านล่างครับ
  1. ที่ F7 คีย์
    =IFERROR(INDEX($C$7:$C$24,SMALL(IF(FREQUENCY(IF($C$7:$C$24<>"BBBB",IF($C$7:$D$24<>"",MATCH($C$7:$C$24&$E$7:$E$24,$C$7:$C$24&$E$7:$E$24,0))),ROW($C$7:$C$24)-ROW($C$7)+1),ROW($C$7:$C$24)-ROW($C$7)+1),ROWS(F$2:F2))),"")
    Ctrl+Shift+Enter > Copy ลงด้านล่าง
  2. ที่ G7 คีย์
    =IFERROR(INDEX($E$7:$E$24,SMALL(IF(FREQUENCY(IF($C$7:$C$24<>"BBBB",IF($C$7:$D$24<>"",MATCH($C$7:$C$24&$E$7:$E$24,$C$7:$C$24&$E$7:$E$24,0))),ROW($C$7:$C$24)-ROW($C$7)+1),ROW($C$7:$C$24)-ROW($C$7)+1),ROWS(G$2:G2))),"")
    Ctrl+Shift+Enter > Copy ลงด้านล่าง

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Tue Mar 24, 2020 9:14 am
by Totem
:D ได้ตามต้องการ ขอบคุณครับ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Fri Jul 10, 2020 5:20 am
by pro602
snasui wrote: Mon Aug 01, 2016 8:21 pm :D ตัวอย่างสูตรครับ

เซลล์ D4 คีย์

=IFERROR(INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))),"")

Ctrl+Shift+Enter > Copy ลงด้านล่าง
อาจารย์ครับเครื่องหมาย "~" ที่อยู่หลัง Match มันหมายถึงอะไรครับและในการป้อนเครื่องหมายนี้ขณะเขียนสูตรกดปุ๋มรงไหนครับ ผมลองกดตรงแป้นปุ่มเปลีายนภาษามันไม่ได้ครับ ผมรบกวนอาจารย์ช่วยอธิบายการคำนวนและความหมายของสูตรด้านบนให้ผมพอเข้าใจเป็นแนวทางหน่อยครับ ขอบคุณครับ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Fri Jul 10, 2020 10:53 pm
by snasui
:D เครื่องหมาย Tilde สามารถอ่านเพิ่มเติมได้ที่นี่ครับ http://snasui.com/viewtopic.php?t=8597 กรณีอ่านแล้วไม่เข้าใจสามารถถามเพิ่มเติมได้ครับ

การกดแป้นให้ได้เครื่องหมาย ~ ให้กดแป้น Shift + เครื่องหมายเปลี่ยนภาษา โดยกดค้างไว้ 1 วินาทีครับ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Sat Jul 11, 2020 8:14 am
by pro602
snasui wrote: Fri Jul 10, 2020 10:53 pm :D เครื่องหมาย Tilde สามารถอ่านเพิ่มเติมได้ที่นี่ครับ http://snasui.com/viewtopic.php?t=8597 กรณีอ่านแล้วไม่เข้าใจสามารถถามเพิ่มเติมได้ครับ

การกดแป้นให้ได้เครื่องหมาย ~ ให้กดแป้น Shift + เครื่องหมายเปลี่ยนภาษา โดยกดค้างไว้ 1 วินาทีครับ
ขอบคุณครับอาาจารย์สำหรับที่มาของเครื่องหมาย ~
ผมรบกวนอาจารย์อธิบาย Step การทำงานของสูตรชุดนี้ให้ผมเข้าใจในหลักการหน่อยครับจะได้นำไปประยุกต์ใช้งานได้อย่างเข้าใจครับ (ผมสามารถนำสูตรชุดนี้ไปใช้งานได้ผลตามที่ต้องการ)
=IFERROR(INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))),"")

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Sat Jul 11, 2020 8:41 am
by snasui
:D การอ่านหรือทำความเข้าใจฟังก์ชั่นจะต้องอ่านจากสูตรนอกสุดเข้าไปยังฟังก์ชั่นด้านใน แต่การแทนค่าจะต้องแทนค่าจากฟังก์ชั่นด้านในออกด้านนอกเนื่องจากสูตรจะนำเอาผลลัพธ์ของสูตรด้านในมาใช้ประมวลต่อด้วยสูตรที่ครอบอยู่ด้านนอก การจะทำความเข้าใจสูตรซับซ้อนใด ๆ จะต้องทำทั้งสองอย่างที่กล่าวมาครับ

คำอธิบาย

จากสูตร

=IFERROR(INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))),"")

หมายถึง

ถ้า INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))) ได้ผลลัพธ์เป็น Error ให้แสดงค่าว่าง
หากไม่เกิด Error ให้แสดงผลลัพธ์ที่ได้

จากสูตร

INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4)))

หมายถึง

จากช่วง $C$4:$C$21 ให้นำผลลัพธ์ในลำดับที่ SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4)) มาแสดง ถ้าคำตอบส่วนนี้มีค่าเป็น 10 ภาพรวมสูตรจะได้เป็น INDEX($C$4:$C$21,10) แปลว่าจากช่วง $C$4:$C$21 ให้นำค่าในลำดับที่ 10 มาแสดง

จากสูตร

SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))

Small หมายถึงให้ค่าค่าที่น้อยที่สุดในลำดับที่กำหนด

ค่าที่ต้องการหาคือ IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1) ซึ่งได้มาหลายค่า

ลำดับที่น้อยที่สุดที่กำหนดคือ ROWS(D$4:D4) ถ้าส่วนนี้เป็น 1 แปลว่าให้หาค่าในช่วง IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1) โดยนำค่าที่น้อยที่สุดในลำดับที่ 1 มาแสดง

จากสูตร

IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1)

หมายถึง หาก FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1) มีค่าเป็นจริง (ค่าเป็นจริงของสูตรนี้คือไม่เท่ากับ 0 ถ้าเป็น 0 ถือว่าเป็นเท็จ) ให้แสดงคำตอบเป็น ROW($C$4:$C$21)-ROW($C$4)+1 คือให้แสดงค่าลำดับเริ่มจาก 1 (อ่านเพิ่มเติมที่นี่่ครับ wordpress/large/) หากไม่เป็นจริงให้แสดงค่า False

จากสูตร

FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1)

หมายถึงให้ค่าค่าความถี่ของ MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0) จาก ROW($C$4:$C$21)-ROW($C$4)+1 อ่านเพิ่มเติมที่นี่ครับ http://snasui.com/viewtopic.php?f=3&t=2221

จากสูตร

MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0)

หมายถึงให้หาว่า "~"&$C$4:$C$21 อยู่ในลำดับที่เท่าไรของ $C$5:$C$21&""

การแกะสูตรให้คลุมช่วงเซลล์ในสูตรที่เราสนใจแล้วกดแป้น F9 จะเป็นประเมินสูตรออกมาเป็นผลลัพธ์ให้เห็น หากต้องการยกเลิกให้กดแป้น Ctrl+Z หากต้องการยกเลิกทั้งหมดให้กดแป้น ESC ครับ

Re: ต้องการดึงข้อมูลที่ซ้ำกัน ออกมาแสดงผลเพียงอันเดียว...

Posted: Sat Jul 11, 2020 10:27 am
by pro602
snasui wrote: Sat Jul 11, 2020 8:41 am :D การอ่านหรือทำความเข้าใจฟังก์ชั่นจะต้องอ่านจากสูตรนอกสุดเข้าไปยังฟังก์ชั่นด้านใน แต่การแทนค่าจะต้องแทนค่าจากฟังก์ชั่นด้านในออกด้านนอกเนื่องจากสูตรจะนำเอาผลลัพธ์ของสูตรด้านในมาใช้ประมวลต่อด้วยสูตรที่ครอบอยู่ด้านนอก การจะทำความเข้าใจสูตรซับซ้อนใด ๆ จะต้องทำทั้งสองอย่างที่กล่าวมาครับ

คำอธิบาย

จากสูตร

=IFERROR(INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))),"")

หมายถึง

ถ้า INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))) ได้ผลลัพธ์เป็น Error ให้แสดงค่าว่าง
หากไม่เกิด Error ให้แสดงผลลัพธ์ที่ได้

จากสูตร

INDEX($C$4:$C$21,SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4)))

หมายถึง

จากช่วง $C$4:$C$21 ให้นำผลลัพธ์ในลำดับที่ SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4)) มาแสดง ถ้าคำตอบส่วนนี้มีค่าเป็น 10 ภาพรวมสูตรจะได้เป็น INDEX($C$4:$C$21,10) แปลว่าจากช่วง $C$4:$C$21 ให้นำค่าในลำดับที่ 10 มาแสดง

จากสูตร

SMALL(IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1),ROWS(D$4:D4))

Small หมายถึงให้ค่าค่าที่น้อยที่สุดในลำดับที่กำหนด

ค่าที่ต้องการหาคือ IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1) ซึ่งได้มาหลายค่า

ลำดับที่น้อยที่สุดที่กำหนดคือ ROWS(D$4:D4) ถ้าส่วนนี้เป็น 1 แปลว่าให้หาค่าในช่วง IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1) โดยนำค่าที่น้อยที่สุดในลำดับที่ 1 มาแสดง

จากสูตร

IF(FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1),ROW($C$4:$C$21)-ROW($C$4)+1)

หมายถึง หาก FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1) มีค่าเป็นจริง (ค่าเป็นจริงของสูตรนี้คือไม่เท่ากับ 0 ถ้าเป็น 0 ถือว่าเป็นเท็จ) ให้แสดงคำตอบเป็น ROW($C$4:$C$21)-ROW($C$4)+1 คือให้แสดงค่าลำดับเริ่มจาก 1 (อ่านเพิ่มเติมที่นี่่ครับ wordpress/large/) หากไม่เป็นจริงให้แสดงค่า False

จากสูตร

FREQUENCY(MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0),ROW($C$4:$C$21)-ROW($C$4)+1)

หมายถึงให้ค่าค่าความถี่ของ MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0) จาก ROW($C$4:$C$21)-ROW($C$4)+1 อ่านเพิ่มเติมที่นี่ครับ http://snasui.com/viewtopic.php?f=3&t=2221

จากสูตร

MATCH("~"&$C$4:$C$21,$C$5:$C$21&"",0)

หมายถึงให้หาว่า "~"&$C$4:$C$21 อยู่ในลำดับที่เท่าไรของ $C$5:$C$21&""

การแกะสูตรให้คลุมช่วงเซลล์ในสูตรที่เราสนใจแล้วกดแป้น F9 จะเป็นประเมินสูตรออกมาเป็นผลลัพธ์ให้เห็น หากต้องการยกเลิกให้กดแป้น Ctrl+Z หากต้องการยกเลิกทั้งหมดให้กดแป้น ESC ครับ
-ขอบคุณครับอาจารย์