Page 1 of 2

แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 8:01 pm
by chom_poona
สวัสดีค่ะ

รบกวนสอบถามหน่อยค่ะ ถ้าเราต้องการหาค่าที่ซ้ำกันใน cells มาแสดง

เช่น

5 5 6
2 4 2
output
5 = 2
2 = 2

ใน excel มีสูตรอะไรไหมค่ะที่หาค่าซ้ำจาก Range ได้ ลองใช้ countif แล้ว จะหาได้แค่ค่า column
เราควรใช้ VBA เขียนสูตร count ไหมค่ะ

รบกวน เพื่อนสมาชิกแนะนำหน่อยค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 8:06 pm
by snasui
:D ตัวอย่าฟังก์ชัน Countif ที่ I2 ครับ

=COUNTIF($C$3:$E$10,H3)

Enter > Copy ลงด้านล่าง

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 8:10 pm
by chom_poona
ขอบคุณนะค่ะ

ในกรณีที่ ไม่มีค่า H3 ไว้อ้างอิงหละค่ะ ที่ยกตัวอย่างมาคือ เรา มีค่า H3 มันเลยมีตัวอ้างอิงแล้ว

ช่วง Range ถ้าไม่ได้อยู่ใน คอลัมน์เดียวกัน ก็อ้างอิงไม่ได้ใช่ไหมค่ะ

ขอบคุณค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 8:20 pm
by chom_poona
ตัวอย่าง code ที่เขียน ด้วย VBA ค่ะ

แต่ยังไม่สามารถหาค่าได้

ในช่อง เช็คค่าซ้ำ เราควรใส่ array ไหมค่ะ

แล้วถ้าค่าใน array ไม่ซ้ำให้ลบออก ใช้สูตรอะไรค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 8:38 pm
by snasui
:D ผมยังไม่เข้าใจในสิ่งที่คุณ chom_poona อธิบายครับ

หากสิ่งที่ต้องการคือ

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

ตัวอย่างสูตร
  1. เซลล์ G3 คีย์เพื่อแสดงรายการออกมาเป็นคอลัมน์เดียวจะได้สะดวกในการใช้สูตรในข้อ 2
    =IFERROR(INDEX($C$3:$E$10,INT((ROWS(G$3:G3)-1)/3)+1,MOD((ROWS(G$3:G3)-1),3)+1),"")
    Enter > Copy ลงด้านล่าง โดยเลข 3 ใน Int และ Mod ที่ไม่เกี่ยวกับช่วงเซลล์คือจำนวนคอลัมน์ของข้อมูล
  2. ที่เซลล์ H3 คีย์สูตร เพื่อแสดงเฉพาะค่าที่ซ้ำเท่านั้น ค่าที่ไม่ซ้ำไม่นำมาแสดง
    =IFERROR(INDEX($G$3:$G$100,SMALL(IF(FREQUENCY(IF($G$3:$G$100<>0,IF($G$3:$G$100<>"",IF(COUNTIF($G$3:$G$100,$G$3:$G$100)>1,MATCH($G$3:$G$100,$G$3:$G$100,0)))),ROW($G$3:$G$100)-ROW(G$3)+1),ROW($G$3:$G$100)-ROW(G$3)+1),ROWS(G$3:G3))),"")
    Ctrl+Shift+Enter > Copy ลงด้านล่าง
ส่วน Countif คิดว่าน่าจะเข้าใจและเขียนเองได้อยู่แล้ว

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 8:47 pm
by chom_poona
ไฟล์ที่ยกมา เป็นตัวอย่างเท่านั้นค่ะ

ส่วนที่ต้องการใช้งานจริงก็คือ ใน ไฟล์ VBค่ะ หาข้อมูลที่ซ้ำกันใน ตาราง แล้วแสดงค่าที่ซ้ำกันออกมา ว่าซ้ำกันกี่ค่า

แล้วนำค่านั้น ไปเปรียบเทียบว่า น้อยกว่า หรือมากกว่าค่าที่กำหนดอีกครั้งหนึ่งค่ะ

ขอบคุณค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 8:48 pm
by snasui
:D พิจารณาใช้สูตรที่ผมตอบไปว่าใช้ได้หรือไม่ ไม่ถูกต้องตรงไหน อย่างไร เรื่อง VBA ผมยังไม่ตอบครับ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 9:09 pm
by chom_poona
ขอบคุณมากค่ะ ยังมีบางตัวที่ซ้ำแต่ excel ไม่นับมาค่ะ

แล้ว ในช่อง G3 เราลากมายาว กว่า Range ที่กำหนด จะมีตัวเลข เพิ่มขึ้นมา ตรงนี้เรา ไม่ให้แสดงได้ไหมค่ะ

ถ้า คุณsnasui ว่าง รบกวน อธิบายสูตรให้ด้วยนะค่ะ

ขอบคุณค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 9:14 pm
by snasui
chom_poona wrote:ขอบคุณมากค่ะ ยังมีบางตัวที่ซ้ำแต่ excel ไม่นับมาค่ะ
:D สูตรใน G3 เขียนไม่ถูกต้องครับ
ตรง ROWS(G$3:G4) ต้องปรับให้เป็น ROWS(G$3:G3) ครับ

ในคอลัมน์ G ต้องการจะแสดงรายการออกมาทั้งหมด ถ้าไม่ต้องการเห็นก็ต้องซ่อนครับ ค่าที่ใช้คือคอลัมน์ H เป็นต้นไป

สูตรนี้ยากมาก โดยสรุปเป็นการให้หาว่าค่าใดซ้ำกันบ้างโดยใช้ IF(COUNTIF($G$3:$G$100,$G$3:$G$100)>1 มาช่วย หากผลลัพธ์เป็นจริง แสดงว่าค่านั้นซ้ำ ก็จะเอาเฉพาะค่าที่ซ้ำมาทำการประมวลผลต่อ โดยค่าที่ซ้ำเหล่านั้นให้นำมาแสดงเพียงค่าเดียวของแต่ละชุด โดยใช้ Frequency เข้ามาช่วยจัดการให้แสดงค่าที่ซ้ำให้เหลือเพียงค่าเดียว

ผมมี Tag อยู่ใต้โพสต์ของผมทุกโพสต์ ลองศึกษาดูแต่ละฟังก์ชั่นที่เกี่ยวข้องอย่างละเอียด หากไม่เข้าใจส่วนใด ถามมาได้เรื่อย ๆ ครับ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 9:23 pm
by chom_poona
แก้ไขสูตรแล้ว แต่ จำนวนที่ซ้ำ 123 ยังไม่โชว์ ค่ะ

ขอบคุณค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 9:28 pm
by snasui
:o ขออภัยครับ

ผมอ้างผิดเซลล์ เซลล์ที่ผิดคือ H3 ต้องแก้ใหม่ตามที่ผมแจ้งไป

ส่วนที่บอกว่าค่าวนนั้น ไม่วนครับ เป็นการนำ C3:E10 มาแสดงทุกเซลล์ ลากสูตรลงด้านล่างไปจนแสดงครบทุกค่าครับ

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 9:35 pm
by chom_poona
ที่ h3 แก้ตรงไหนค่ะ ที่เห็นก็ lock เซลไว้หมดแล้ว

ดึกแล้ว ขอบคุณมากนะค่ะที่สละเวลา

Re: แสดงค่าซ้ำใน Range

Posted: Sat May 21, 2016 9:39 pm
by chom_poona
ได้แล้วนะค่ะ ขอบคุณมากค่ะยังไง ขอลองศึกษาสูตรก่อนนะค่ะ ถ้าติดอะไร อาจต้องรบกวนนะค่ะ

คืนนี้นอนหลับแล้วฝันดีค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sun May 22, 2016 6:40 am
by snasui
chom_poona wrote:ตัวอย่าง code ที่เขียน ด้วย VBA ค่ะ

แต่ยังไม่สามารถหาค่าได้

ในช่อง เช็คค่าซ้ำ เราควรใส่ array ไหมค่ะ

แล้วถ้าค่าใน array ไม่ซ้ำให้ลบออก ใช้สูตรอะไรค่ะ
:D ตัวอย่างการ Loop ด้วย VBA เพื่อนำค่ามาวางในคอลัมน์ J และ O ครับ

Code: Select all

Dim rAll As Range, r As Range
With ActiveSheet
    Set rAll = .Range("b19:e24")
    .Range("j6:j1000,o6:o1000").ClearContents
    For Each r In rAll
        If Application.CountIf(rAll, r.Value) > 1 Then
            If r.Value < .Range("j2").Value Then
                If Application.CountIf(.Range("j2", .Range("j" & .Rows.Count).End(xlUp)), r.Value) = 0 Then
                     .Range("j" & .Rows.Count).End(xlUp).Offset(1, 0).Value = r.Value
                End If
            Else
                If Application.CountIf(.Range("o2", .Range("o" & .Rows.Count).End(xlUp)), r.Value) = 0 Then
                    .Range("o" & .Rows.Count).End(xlUp).Offset(1, 0).Value = r.Value
                End If
            End If
        End If
    Next r
End With
โดยจะนำเฉพาะค่าที่ไม่ซ้ำไปวางตามเงื่อนไข คือถ้าค่าไม่ซ้ำนั้นน้อยกว่าเซลล์ J2 ให้วางที่คอลัมน์ J ถ้าไม่น้อยกว่าเซลล์ J2 ให้วางที่คอคัมน์ O

Re: แสดงค่าซ้ำใน Range

Posted: Sun May 22, 2016 2:59 pm
by chom_poona
ตาม code vba ที่ให้มา ลอง run แล้ว ขึ้น error ค่ะ

Set rAll = .Range("b19:e24") ที่แถวนี้ค่ะ

หรือว่า จะ เก็บค่าไว้ใน array ก่อนแล้ว ค่อย หาค่า ใช้ countif เอา จะลองทำดูก่อนนะค่ะ ขอบคุณมากค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sun May 22, 2016 3:03 pm
by snasui
:lol: ในเครื่องผมไม่ Error ครับ

หากมี Error กรุณาแนบไฟล์นั้นมาด้วย จะได้ช่วยตรวจสอบได้ครับ

Re: แสดงค่าซ้ำใน Range

Posted: Sun May 22, 2016 3:24 pm
by chom_poona
ไม่ Error แล้วค่ะ ขอบคุณมากนะค่ะ

อยากรบกวนถามสูตร vba ในการ เรียงข้อมูลจากมากไปหาน้อยค่ะ สูตรที่มีอยู่ .xlDescending._นั้น เข้าใจว่าเปลี่ยนแค่ range เดียว

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

ตัวอย่างไฟล์ตามที่แนบค่ะ

และอยากรบกวนถามว่า เราจะทำยังไงถึงจะมองภาพexcel ออก สามารถแก้ไขโจทย์ต่างๆ ได้ ค่ะ อยากขอคำแนะนำจะได้นำไปใช้ประโยชน์ได้บ้างค่ะ

ขอบคุณค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sun May 22, 2016 3:32 pm
by snasui
:D ใช้การบันทึก Macro จะได้ Code มาให้ปรับใช้ได้ สำหรับวิธีการบันทึก Macro ดูวิธีการตาม Link นี้ครับ wordpress/macro-recoding/

สำหรับคำถามเกี่ยวกับ VBA จำเป็นต้องเขียนมาเองก่อนตามกฎการใช้บอร์ดข้อ 5 ด้านบนครับ :roll:

เรื่องการมองภาพและแก้ปัญหาใด ๆ ไม่ว่าจะด้วย Excel หรือโปรแกรมอื่นนั้น ขึ้นอยู่กับความรู้และประสบการณ์เป็นส่วนสำคัญ ต้องฝึกฝนบ่อย ๆ ครับ

Re: แสดงค่าซ้ำใน Range

Posted: Sun May 22, 2016 3:55 pm
by chom_poona
ได้กลับไปลองใช้ macro บันทึกแล้วค่ะ นำสูตรมาใส่ใน code เราแล้ว แต่ว่า ก็ยังไม่ sort ให้ค่ะ

รบกวนดูสูตรให้หน่อยค่ะ

ขอบคุณค่ะ

Re: แสดงค่าซ้ำใน Range

Posted: Sun May 22, 2016 3:59 pm
by snasui
:D ถ้า Sort แล้วผลลัพธ์จะต้องเป็นอย่างไร ช่วยอธิบายเพิ่มเติมและแนบไฟล์ตัวอย่างคำตอบมาอีกรอบครับ