Page 1 of 1

VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Sun Nov 18, 2018 10:06 pm
by akekorn
สวัสดีครับคุณคนควน และเพื่อนสมาชิกทุกท่าน
วันนี้ผมมีปัญหามาขอความอนุเคราะห์จากเพื่อนสมาชิก คือ ผมได้ลอง เขียน ฺVBA หาจำนวนตัวเลขที่ซ้ำกันโดยไม่สนใจเครื่องหมายบวกลบ
แต่พอทดสอบ โปรแกรมกลับทำแค่เพียงไม่กี่แถว ทั้ง ที่ใน column ยั้งมีตัวเลขที่ซ้ำกันอยู่
โดยผมได้แนบ file ที่ผมทำไว้มาด้วยครับ
ซึ่งผมได้ใส่สีเหลืองไว้เพราะเป็นตัวที่ซ้ำกันอยู่
่จึงขอความอนุเคราะห์จากเพื่อนสมาชิกกับปัญหาที่ผมพบด้วยครับ
ขอบคุณครับ

เอก

Re: VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Sun Nov 18, 2018 10:31 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Sub CK_DUP()
    Dim Cell As Range
    Dim Source As Range
    Dim Source1 As Range
    With Sheets("Sheet1")
        Set Source = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
        For Each Cell In Source
            Cell.Offset(0, 1).Value = Abs(Cell.Value)
        Next Cell
        Set Source1 = Source.Offset(0, 1)
        For Each Cell In .Range("b2", .Range("b" & .Rows.Count).End(xlUp))
            If Application.WorksheetFunction.CountIf(Source1, Cell) > 1 Then
                Cell.Interior.Color = RGB(255, 0, 0)
            End If
        Next Cell
        Source1.ClearContents
     End With
    ' MsgBox (k)
End Sub

Re: VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Sun Nov 18, 2018 10:40 pm
by akekorn
ได้แล้วครับขอบคุณมากครับคุณคนควน

Re: VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Sun Nov 18, 2018 11:00 pm
by akekorn
แต่รบกวนอีกคำถามครับหากในการผมต้องการให้ใส่สีทั้งแถวตามตัวอย่างจะต้องปรับ code เป็นแบบไหนครับ
คืออ้างตั้งแต่ cell a:e ต้องเขียน vba แบบไหนครับ
ขอบคุณครับ

Re: VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Mon Nov 19, 2018 11:27 am
by logic
ลองแบบนี้ครับ

Code: Select all

Sub CK_DUP()
    Dim Cell As Range
    Dim Source As Range
    Dim Source1 As Range
    With Sheets("Sheet1")
        Set Source = .Range("e2", .Range("e" & .Rows.Count).End(xlUp))
        For Each Cell In Source
            Cell.Offset(0, 1).Value = Abs(Cell.Value)
        Next Cell
        Set Source1 = Source.Offset(0, 1)
        For Each Cell In Source1
            If Application.WorksheetFunction.CountIf(Source1, Cell) > 1 Then
                Cell.Offset(0, -5).Resize(1, 5).Interior.Color = RGB(255, 0, 0)
            End If
        Next Cell
        Source1.ClearContents
    End With
    ' MsgBox (k)
End Sub

Re: VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Mon Nov 19, 2018 3:52 pm
by akekorn
ขอบคุณมากๆครับผม

Re: VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Mon Nov 19, 2018 9:13 pm
by akekorn
เรียน คุณคนควนและเพื่อนสมาชิกทุกท่าน
เนื่องจากมีการเปลี่ยน เงื่อนไข
- ว่าหากตัวเลขที่จะ highlight ต้องเป็นตัวเลขที่มีเครื่องหมาย + - ของคู่ตัวเอง โดยเริ่ม ตั้งแต่ 2 คู่ 4 คู่ 6 คู่ เหมือนกันแต่เป็น + -
- กรณีเป็น 0 ให้ถือว่าเป็นกลุ่มเดียวกันให้ highlight ทั้งกลุ่ม
- ถ้าเป็นตัวเลขเหมือนกัน และมีเพียงเครื่องหมาย + อย่างเดียว หรือ - อย่างเดียว จะไม่ highlight เพราะถือว่าไม่ใช่คู่
โดยผมลองปรับ code แต่ไม่สามารถได้ผลลัพภ์ ตามต้องการผมได้แนบ ตัวอย่างที่ทำมาด้วยครับ
ขอความอนุเคราะห์ ด้วยครับเพราะติดปัญหานี้แก้มาทั้งวันแต่ไม่ได้คำตอบที่ต้องการ
ขอบคุณมากๆครับผม

Re: VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Mon Nov 19, 2018 10:03 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Sub CK_DUP()
    Dim Cell As Range
    Dim Source As Range
    Dim v1 As Integer
    Dim v2 As Integer
    With Sheets("Sheet1")
    Set Source = .Range("a2", .Range("a" & .Rows.Count).End(xlUp))
    For Each Cell In Source
        v1 = Application.CountIf(Source, Cell.Value)
        v2 = Application.CountIf(Source, -Cell.Value)
        If Cell.Value = 0 Or (v1 > 0 And v2 > 0 And v1 - v2 = 0) Then
            Cell.Offset(0, 1).Interior.Color = RGB(0, 255, 0)
        End If
    Next Cell
    End With
End Sub

Re: VBA หาจำนวนซ้ำกันโดยไม่สนใจเครื่องหมาย บวก ลบ

Posted: Mon Nov 19, 2018 10:11 pm
by akekorn
ทำได้แล้วครับผม ขอบคุณ คุณ คนควนมากๆเลยครับ