Page 1 of 1

สอบถาม VBA สำหรับเปรียบเทียบ 2 columns

Posted: Sun Jun 21, 2020 8:15 pm
by nitiwatza
สวัสดีครับ เพิ่งสมัครสมาชิกครับ
พบเจอปัญหา VBA code ครับ คือ อยากจะเปรียบเทียบคอลั่ม A และคอลั่ม B ในแต่ละ Row, ถ้า 2 ช่องมีค่าเท่ากันให้แสดงคอลั่ม C ว่า "QC completed" แต่ถ้าต่างกันให้แสดงว่า "QC not completed"
จากไฟล์แนบผมนำโค้ดจากอินเตอร์เน็ตมาแก้ไข ซึ่งก่อนหน้านี้ใช้กับ Timestamp แล้วได้ผล แต่กับเคสนี้ไม่เกิดการเปลี่ยนแปลงเลยและไม่ขึ้น debug ครับ

รบกวนผู้รู้ผมต้องแก้โค้ดอย่างไรบ้างครับ ขอบคุณมากครับ

Re: สอบถาม VBA สำหรับเปรียบเทียบ 2 columns

Posted: Sun Jun 21, 2020 8:33 pm
by snasui
:D Code ในไฟล์จะทำงานเมื่อเซลล์ใด ๆ มีการเปลี่ยนแปลงครับ ถ้าจะให้ Code ทำงานต้องคีย์ค่าในเซลล์ใด ๆ ในคอลัมน์ A เสียก่อนครับ

ควรมีตัวอย่างข้อมูลในไฟล์ตัวอย่าง พร้อมทั้งอธิบายว่าต้องการให้แสดงผลลัพธ์ในเซลล์ไหนเป็นอย่างไร จะได้สะดวกในการทำความเข้าใจครับ

Re: สอบถาม VBA สำหรับเปรียบเทียบ 2 columns

Posted: Sun Jun 21, 2020 8:39 pm
by nitiwatza
snasui wrote: Sun Jun 21, 2020 8:33 pm :D Code ในไฟล์จะทำงานเมื่อเซลล์ใด ๆ มีการเปลี่ยนแปลงครับ ถ้าจะให้ Code ทำงานต้องคีย์ค่าในเซลล์ใด ๆ ในคอลัมน์ A เสียก่อนครับ

ควรมีตัวอย่างข้อมูลในไฟล์ตัวอย่าง พร้อมทั้งอธิบายว่าต้องการให้แสดงผลลัพธ์ในเซลล์ไหนเป็นอย่างไร จะได้สะดวกในการทำความเข้าใจครับ

ขอโทษครับ ลืมใส่กรณีตัวอย่างให้ ผมแนบไฟล์ให้ใหม่นะครับ
จากตัวอย่าง
1. Cell A2 = "AAA" และ Cell B2 = "AAA" ผลลัพธ์ Cell C2 = "QC completed" เพราะ Cell A2 = Cell B2 ครับ
2. Cell A3 = "AAD" และ Cell B3 = "AAB" ผลลัพธ์ Cell C3 = "QC not completed" เพราะ Cell A3 <> Cell B3 ครับ
ในตัวอย่างโค้ดไม่ทำงานนะครับ ผมใส่ตัวอย่างเข้าไปเองเฉยๆ

Re: สอบถาม VBA สำหรับเปรียบเทียบ 2 columns

Posted: Sun Jun 21, 2020 10:15 pm
by snasui
:D ตัวอย่างการปรับ Code ครับ

Code: Select all

Dim x As Range
Application.EnableEvents = True
If Target.Count < 100000 Then
    Application.ScreenUpdating = False
    For Each x In Target
        If Not Intersect(Range("B:B"), x) Is Nothing Then
            If x.Value = "" And x.Offset(0, -1).Value = "" Then
                x.Offset(0, 1).Value = ""
            ElseIf x.Value = x.Offset(0, -1).Value Then
                x.Offset(0, 1).Value = "QC completed"
            Else
                x.Offset(0, 1).Value = "QC not completed"
            End If
        ElseIf Not Intersect(Range("a:a"), x) Is Nothing Then
            If x.Value = "" And x.Offset(0, 1).Value = "" Then
                x.Offset(0, 2).Value = ""
            ElseIf x.Value = x.Offset(0, 1).Value Then
                x.Offset(0, 2).Value = "QC completed"
            Else
                x.Offset(0, 2).Value = "QC not completed"
            End If
        End If
    Next x
    Application.ScreenUpdating = True
End If
Application.EnableEvents = True

Re: สอบถาม VBA สำหรับเปรียบเทียบ 2 columns

Posted: Mon Jun 22, 2020 9:07 am
by nitiwatza
snasui wrote: Sun Jun 21, 2020 10:15 pm :D ตัวอย่างการปรับ Code ครับ

Code: Select all

Dim x As Range
Application.EnableEvents = True
If Target.Count < 100000 Then
    Application.ScreenUpdating = False
    For Each x In Target
        If Not Intersect(Range("B:B"), x) Is Nothing Then
            If x.Value = "" And x.Offset(0, -1).Value = "" Then
                x.Offset(0, 1).Value = ""
            ElseIf x.Value = x.Offset(0, -1).Value Then
                x.Offset(0, 1).Value = "QC completed"
            Else
                x.Offset(0, 1).Value = "QC not completed"
            End If
        ElseIf Not Intersect(Range("a:a"), x) Is Nothing Then
            If x.Value = "" And x.Offset(0, 1).Value = "" Then
                x.Offset(0, 2).Value = ""
            ElseIf x.Value = x.Offset(0, 1).Value Then
                x.Offset(0, 2).Value = "QC completed"
            Else
                x.Offset(0, 2).Value = "QC not completed"
            End If
        End If
    Next x
    Application.ScreenUpdating = True
End If
Application.EnableEvents = True
ขอบคุณมากครับ ใช้งานได้ถูกวัตถุประสงค์เลยครับ :thup: :thup: