:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

ป้องกันการป้อนข้อมูลซ้ำ ทั้งในSheetตัวเองและSheetถัดไปทุกSheet ใน VBA Excel

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
Jukkrapong23
Member
Member
Posts: 2
Joined: Mon Sep 03, 2018 1:14 pm

ป้องกันการป้อนข้อมูลซ้ำ ทั้งในSheetตัวเองและSheetถัดไปทุกSheet ใน VBA Excel

#1

Post by Jukkrapong23 »

Code: Select all

Sub Duplicate()

    Dim lRow As Long, wsLRow As Long, i As Long
    Dim aCell As Range
    Dim ws As Worksheet, sh As Worksheet
    Dim strSearch As String
    Dim show As Integer
    
    show = 0
    
    Set sh = ActiveSheet()

    With sh
        '~~> Get last row in Col A of the sheet
        '~~> which got activated
        'lRow = sh.Range("C6", sh.Range("C6").End(xlDown)).Rows.Count
        lRow = Cells(Rows.Count, "C").End(xlUp).Row

        '~~> Remove existing Color from the column
        '~~> This is to cater for any deletions in the
        '~~> other sheets so that cells can be re-colored
        
        .Columns(3).Interior.ColorIndex = xlNone

        '~~> Loop through the cells of the sheet which
        '~~> got activated
        For i = 6 To lRow
            '~> Store the ID in a variable
           strSearch = .Range("C" & i).Value
            
            If strSearch <> "" Then
            '~~> loop through the worksheets in the workbook
            For Each ws In ThisWorkbook.Worksheets
                '~~> This is to ensure that it doesn't
                '~~> search itself
                If ws.Name <> sh.Name Then
                    '~~> Get last row in Col A of the sheet
                    wsLRow = ws.Range("C" & ws.Rows.Count).End(xlUp).Row

                    '~~> Use .Find to quick check for the duplicate
                    Set aCell = ws.Range("C6:C" & wsLRow).Find(What:=strSearch, _
                                                               LookIn:=xlValues, _
                                                               LookAt:=xlWhole, _
                                                               SearchOrder:=xlByRows, _
                                                               SearchDirection:=xlNext, _
                                                               MatchCase:=False, _
                                                               SearchFormat:=False)

                    '~~> If found then color the cell red and exit the loop
                    '~~> No point searching rest of the sheets
                    If Not aCell Is Nothing Then
                        sh.Range("C" & i).Interior.ColorIndex = 3
                        show = 1
                        Exit For
                    End If
                End If
            Next ws
            End If
        Next i
    End With
    
    '------------------------------------------'
    
    Dim lastRow As Long
    Dim matchFoundIndex As Long
    Dim iCntr As Long, iCntr2 As Long
    
    With sh
    'lastRow = Cells(Rows.Count, "C").End(xlUp).Row
    'lastRow = sh.Range("C6", sh.Range("C6").End(xlDown)).Rows.Count
    'lastRow = .Range("C" & .Rows.Count).End(xlUp).Row
    'lastRow = lRow
    iCntr = 6
    For iCntr = 6 To lRow
    If Cells(iCntr, 6) <> "" Then
        matchFoundIndex = WorksheetFunction.Match(Cells(iCntr, 3), Range("C6:C" & iCntr), 0)
        If iCntr <> matchFoundIndex Then
            Cells(iCntr, 3).Interior.ColorIndex = 3
            show = 1
        
        If iCntr = matchFoundIndex And iCntr <> lRow Then
            iCntr2 = iCntr + 1
            matchFoundIndex = WorksheetFunction.Match(Cells(iCntr, 3), Range("C" & iCntr2 & ":C" & lRow), 0)
        End If
            If iCntr <> matchFoundIndex Then
                Cells(iCntr, 3).Interior.ColorIndex = 3
                show = 1
            End If
        End If
    End If
    Next
    
    '-------------------------------------------'
    
    End With
        
    If show = 1 Then
        MsgBox ("Duplicate ID Sheet")
    End If


End Sub



(ปัญหาตอนนี้โค้ดของโปรแกรมปัจจุบันสามารถตรวจสอบใน Sheet อื่นๆได้ แล้วก็แจ้งเตือนได้ แต่ไม่สามารถตรวจสอบใน Sheet ตนเอง ถึงแม้เลขจะซ้ำกันก็ตาม)

เป้าหมาย
  • ต้องการตรวจสอบและแจ้งเตือนเมื่อเลขซ้ำกันใน Sheet ตนเอง
  • ต้องการตรวจสอบและแจ้งเตือนเมื่อตรวจสอบกับ Sheet อื่น
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ป้องกันการป้อนข้อมูลซ้ำ ทั้งในSheetตัวเองและSheetถัดไปทุกSheet ใน VBA Excel

#2

Post by snasui »

:D ช่วยแนบไฟล์ตัวอย่างที่มี Code นี้มาด้วยจะได้สะดวกในการทดสอบครับ
Jukkrapong23
Member
Member
Posts: 2
Joined: Mon Sep 03, 2018 1:14 pm

Re: ป้องกันการป้อนข้อมูลซ้ำ ทั้งในSheetตัวเองและSheetถัดไปทุกSheet ใน VBA Excel

#3

Post by Jukkrapong23 »

ขอโทษทีที่ไม่ได้ตอบครับ พอดีผมแก้ไขได้แล้วครับ

ทีนี้ผมอยากทราบวิธีที่จะ link โค้ด นี้ให้มันตรวจสอบกับอีกไฟล์งานหนึ่ง จะทำได้อย่างไรครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: ป้องกันการป้อนข้อมูลซ้ำ ทั้งในSheetตัวเองและSheetถัดไปทุกSheet ใน VBA Excel

#4

Post by snasui »

Jukkrapong23 wrote: Thu Sep 06, 2018 10:00 pm ขอโทษทีที่ไม่ได้ตอบครับ พอดีผมแก้ไขได้แล้วครับ

ทีนี้ผมอยากทราบวิธีที่จะ link โค้ด นี้ให้มันตรวจสอบกับอีกไฟล์งานหนึ่ง จะทำได้อย่างไรครับ
:D กรุณาแนบไฟล์ตัวอย่างพร้อม Code และอธิบายรายละเอียดว่าต้องการตรวจสอบกับค่าในไฟล์ไหน ชีตไหน ฯลฯ ครับ
Post Reply