Page 1 of 1

มีปัญหาการเขียน VBA ไม่ให้ลงข้อมูลซ้ำกรณี Copy Paste แต่ติดเงื่อนไข

Posted: Thu Jul 05, 2018 8:45 pm
by kwantar
ปัญหามีดังนี้
1.อาจจะมาจากความรู้ด้านนี้ยังน้อยตอนนี้เลยสามารถเขียนขึ้นมาได้แบบธรรมดา
2.ที่ต้องการรับคำแนะนำดังรูป เช่นต้องการลงข้อมูลในส่วนของ IS : OTP199 จะไม่สามารถลงข้อมูล JN เป็น 011 แะ 012 ได้
3.ตอนนี้สามารถเขียนโค๊ดแบบธรรมดาได้ดังนี้
Private Sub Worksheet_Change(ByVal Target As Range)
If Application.CountIf(Range("c:c"), Target) > 1 Then
MsgBox "Duplicate Entry"
Target.Value = ""
End If
End Sub
4.แนวคิดตอนนี้คือจะใช้คำสั่ง .Find ในการตรวจสอบ แต่ไม่ทราบว่าจะเริ่มอย่างไรดี
5.ควรเริ่มอย่างไรดีครับใน Youtube ผมหากรณีนี้ไม่เจอเลยครับพิมพ์ภาษาอังกฤษในการค้นหาแล้ว


ขอบคุณสำหรับคำแนะนำครับ

Re: มีปัญหาการเขียน VBA ไม่ให้ลงข้อมูลซ้ำกรณี Copy Paste แต่ติดเงื่อนไข

Posted: Thu Jul 05, 2018 9:53 pm
by snasui
:D Code ที่เขียนมาติดปัญหาตรงไหน อย่างไร หากไม่ติดปัญหาสามารถใช้ได้ครับ

การโพสต์ Code ในช่องความเห็นควรโพสต์ให้แสดงเป็น Code ดูตัวอย่างที่กฎการใช้บอร์ดข้อ 5 ด้านบน จะได้สะดวกในการอ่านครับ

Re: มีปัญหาการเขียน VBA ไม่ให้ลงข้อมูลซ้ำกรณี Copy Paste แต่ติดเงื่อนไข

Posted: Thu Jul 05, 2018 10:04 pm
by kwantar
snasui wrote: Thu Jul 05, 2018 9:53 pm :D Code ที่เขียนมาติดปัญหาตรงไหน อย่างไร หากไม่ติดปัญหาสามารถใช้ได้ครับ

การโพสต์ Code ในช่องความเห็นควรโพสต์ให้แสดงเป็น Code ดูตัวอย่างที่กฎการใช้บอร์ดข้อ 5 ด้านบน จะได้สะดวกในการอ่านครับ
ขอโทษครับครั้งหน้าจะแก้ให้เรียบร้อยครับ

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

Re: มีปัญหาการเขียน VBA ไม่ให้ลงข้อมูลซ้ำกรณี Copy Paste แต่ติดเงื่อนไข

Posted: Thu Jul 05, 2018 10:15 pm
by snasui
:D ดูเหมือนต้องการตรวจสอบหลายเงื่อนไข สามารถใช้ฟังก์ชั่น Countifs มาช่วยได้ ดูตัวอย่างตามด้านล่างครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Or Target.Column = 3 Then
        If Target.Value = "" Then Exit Sub
        If Target.Column = 2 Then
            If Application.CountIfs(Range("b:b"), Target, Range("c:c"), _
                Target.Offset(0, 1)) > 1 Then
                MsgBox "Duplicate Entry"
                Target.Value = ""
            End If
        Else
            If Application.CountIfs(Range("b:b"), Target.Offset(0, -1), _
                Range("c:c"), Target) > 1 Then
                MsgBox "Duplicate Entry"
                Target.Value = ""
            End If
        End If
    End If
End Sub