: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
🪷 คำแสดงเจตนา
ขอผลแห่งการให้ความรู้นี้ จงกลับไปยังผู้ที่เป็นเจ้าของเดิม แม้ข้าพเจ้าจะไม่รู้จักท่านก็ตาม ขอให้แสงแห่งปัญญาที่ท่านเคยจุดไว้ ได้กลับไปเติมเต็มชีวิตของท่านอีกครั้ง และขอให้เจตนาของข้าพเจ้าเป็นการคืนความดีอย่างสงบ

รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

ฟอรัมถาม-ตอบปัญหาการใช้งาน 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#1

Post by akung »

คือพอใส่สูตร vlookup ไว้เยอะ ๆ แล้วมันมีการ Update ทำให้ช้ามากเลยครับ เพราะผมใส่สูตรไว้เ็ป็นพันบรรทัดเลยครับ รบกวนด้วยครับ

ปล. ตอนแรกที่คิดว่าคำสั่งจะคล้าย ๆ VB แต่พอทำแล้วมันต่างพอสมควรเลย
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#2

Post by snasui »

:lol: จำเป็นต้องเขียนมาเองแล้วถามที่ติดปัญหาครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#3

Post by akung »

snasui wrote::lol: จำเป็นต้องเขียนมาเองแล้วถามที่ติดปัญหาครับ
รบกวนอาจารย์ด้วยครับ ตอนี้เริ่มจะเป็นรูปเป็นร่างพอสมควร ตอนนี้อยู่ 2 จุดสำคัญครับ

1. ดึงข้อมูลมาแต่ Column3 เรื่องเงิน แต่ทำ Column2 เรื่องชื่อไม่มาไม่ทราบว่าเป็นเพราะเหตุอะไร
2. ถ้าต้องการ Vlookup ด้วย VBA ลงมาเรื่อยต้องทำอย่างไรยังนึกไม่ออกครับ รบกวนอาจารย์ช่วยชี้แนะด้วยครับขอบคุณครับ
Attachments
Vlookup_VBA.xls
(28.5 KiB) Downloaded 97 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#4

Post by snasui »

:D เนื่องจาก Code ที่เขียนให้ Lookup ชื่อมานั้นไม่ถูกต้องจากเดิม

Code: Select all

Name = Application.VLookup(LookFor.Value.Rng, ColName, 0)
ให้ปรับเป็น

Code: Select all

Name = Application.VLookup(LookFor.Value, Rng, ColName, 0)
กรณีต้องการ Lookup เรียงลงมาเรื่อย ๆ ก็สามารถใช้การ Loop เช่น For...Each...Next เข้ามาช่วยดูตัวอย่างตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim LookFor As Range
    Dim Rng As Range
    Dim ColAmount As Integer
    Dim ColName As Integer
    Dim Found As Variant
    Dim Name As Variant
    Dim rAll As Range
    Dim r As Range
    
    Set LookFor = Sheets("Sheet2").Range("A1")
    Set Rng = Sheets("Sheet1").Columns("A:C")
    With Sheets("Sheet2")
        Set rAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
    End With
    ColName = 2
    ColAmount = 3
    
    On Error Resume Next
    For Each r In rAll
        Found = Application.VLookup(r, Rng, ColAmount, 0)
        Name = Application.VLookup(r, Rng, ColName, 0)
        
        If IsError(Found) Then
            MsgBox LookFor & "äÁ辺¢éÍÁÙÅ"
        Else ': MsgBox "The look-up value of " & LookFor & " is " & Found & " in column " & Col
            r.Offset(0, 2) = Found
        End If
        
        If IsError(Name) Then
            MsgBox LookFor & "äÁ辺¢éÍÁÙÅ"
        Else
            r.Offset(0, 1) = Name
        End If
    Next r
    On Error GoTo 0
End Sub
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#5

Post by akung »

ขออภัยครับซ้ำครับ กดครั้งเดียวแต่มา 3 Post
Last edited by akung on Sat Sep 08, 2012 1:06 pm, edited 1 time in total.
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#6

Post by akung »

ขออภัยครับซ้ำครับ กดครั้งเดียวแต่มา 3 Post
Last edited by akung on Sat Sep 08, 2012 1:06 pm, edited 1 time in total.
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#7

Post by akung »

snasui wrote::D เนื่องจาก Code ที่เขียนให้ Lookup ชื่อมานั้นไม่ถูกต้องจากเดิม

Code: Select all

Name = Application.VLookup(LookFor.Value.Rng, ColName, 0)
ให้ปรับเป็น

Code: Select all

Name = Application.VLookup(LookFor.Value, Rng, ColName, 0)
กรณีต้องการ Lookup เรียงลงมาเรื่อย ๆ ก็สามารถใช้การ Loop เช่น For...Each...Next เข้ามาช่วยดูตัวอย่างตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim LookFor As Range
    Dim Rng As Range
    Dim ColAmount As Integer
    Dim ColName As Integer
    Dim Found As Variant
    Dim Name As Variant
    Dim rAll As Range
    Dim r As Range
    
    Set LookFor = Sheets("Sheet2").Range("A1")
    Set Rng = Sheets("Sheet1").Columns("A:C")
    With Sheets("Sheet2")
        Set rAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
    End With
    ColName = 2
    ColAmount = 3
    
    On Error Resume Next
    For Each r In rAll
        Found = Application.VLookup(r, Rng, ColAmount, 0)
        Name = Application.VLookup(r, Rng, ColName, 0)
        
        If IsError(Found) Then
            MsgBox LookFor & "äÁ辺¢éÍÁÙÅ"
        Else ': MsgBox "The look-up value of " & LookFor & " is " & Found & " in column " & Col
            r.Offset(0, 2) = Found
        End If
        
        If IsError(Name) Then
            MsgBox LookFor & "äÁ辺¢éÍÁÙÅ"
        Else
            r.Offset(0, 1) = Name
        End If
    Next r
    On Error GoTo 0
End Sub
ขอบคุณมากครับอาจารย์ พิมพ์ผิดนี้เอง ไม่ฟ้อง Error ด้วย ผมก็งมตรงนี้อยู่นาน

สำหรับลูปนี้ ผมรบกวนอาจารย์ขอความรู้เพิ่มเติมหน่อยครับ ช่วยเขียนอธิบายให้ผมหน่อยครับ

Code: Select all

With Sheets("Sheet2")
        Set rAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
    End With
กับ Code นี้หน่อยครับ

Code: Select all

For Each r In rAll
        Process .....
    Next r
รบกวนอาจารย์ด้วยครับ อยากจะเข้าใจ Code ให้ถูกต้องนะครับ จะได้นำไปใช้กับงานอื่นได้ครับ ขอบคุณอีกครั้งครับอาจารย์
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#8

Post by snasui »

:D คำอธิบายอยู่ใน Code ลองทำความเข้าใจดูครับ

Code: Select all

With Sheets("Sheet2")
        Set rAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp)) 'กำหนดให้ rAll มีค่าตั้งแต่ A1 จนถึงค่า A สุดท้ายที่มีข้อมูล
End With

Code: Select all

For Each r In rAll
        Process ..... ' Process คือการดำเนินการกับสมาชิกแต่ละตัว (แทนค่าด้วย r) ใน rAll
Next r
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#9

Post by akung »

snasui wrote::D คำอธิบายอยู่ใน Code ลองทำความเข้าใจดูครับ

Code: Select all

With Sheets("Sheet2")
        Set rAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp)) 'กำหนดให้ rAll มีค่าตั้งแต่ A1 จนถึงค่า A สุดท้ายที่มีข้อมูล
End With

Code: Select all

For Each r In rAll
        Process ..... ' Process คือการดำเนินการกับสมาชิกแต่ละตัว (แทนค่าด้วย r) ใน rAll
Next r
ขอบคุณครับอาจารย์
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#10

Post by akung »

รบกวนอาจารย์เพิ่มเติมหน่อยครับจาก Code ข้างล่างผมเพิ่มเติมดังนี้ครับ

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

Code: Select all

Set FoundRange = Columns(1).Find(What:=Range("A" & Rows.Count).End(xlUp))  'ãËéËÒ¤Ó·ÕèàËÁ×͹㹠Colum A
    If Not (FoundRange Is Nothing) Then '¶éÒà¨ÍÇèÒ«éÓ
        MsgBox ("ÁÕ¢éÍÁÙÅ«éÓã¹°Ò¹¢éÍÁÙÅ")
        Range("A" & Rows.Count).End(xlUp) = ""
        Range("A" & Rows.Count).End(xlUp).Activate
        GoTo EndProcess
    End If
2. ผมพยายามแยกข้อมูลระหว่างที่คีย์ว่า ถ้าคีย์ข้อมูลใน ColumnA แล้วไม่มีในฐานข้อมูลให้ระบบทำให้ข้อมูลนั้นเป็นตัวหน้าและเป็น Font สีแดง แต่มันเพี้ยนไปครับ บางที่มีข้อมูลในฐานข้อมูลก็เปลี่ยนสีแดงด้วย ทั้งที่โปรแกรมก็สั่งให้เฉพาะที่ไม่มีในฐานข้อมูลเท่านั้นให้ตัวหนังสือเป็นสีแดง

Code: Select all

If IsError(Amount) Then
            Range("A" & Rows.Count).End(xlUp).Application.Selection.Font.ColorIndex = 3
            Range("A" & Rows.Count).End(xlUp).Application.Selection.Font.Bold = True
        Else
            r.Offset(0, 2) = Amount
        End If
ส่วนนี้โปรแกรมรวมทั้งหมดครับ

Code: Select all

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Rng As Range
Dim ColAmount As Integer
Dim ColName As Integer
Dim Amount As Variant
Dim Name As Variant
Dim rAll As Range
Dim r As Range
Dim FoundRange As Range

If Range("A" & Rows.Count).End(xlUp) <> "" Then
    Set FoundRange = Columns(1).Find(What:=Range("A" & Rows.Count).End(xlUp))  'ãËéËÒ¤Ó·ÕèàËÁ×͹㹠Colum A
    If Not (FoundRange Is Nothing) Then '¶éÒà¨ÍÇèÒ«éÓ
        MsgBox ("ÁÕ¢éÍÁÙÅ«éÓã¹°Ò¹¢éÍÁÙÅ")
        Range("A" & Rows.Count).End(xlUp) = ""
        Range("A" & Rows.Count).End(xlUp).Activate
        GoTo EndProcess
    End If

    Set LookFor = Sheets("Sheet2").Range("A1")
    Set Rng = Sheets("Sheet1").Columns("A:C")
    With Sheets("Sheet2")
        Set rAll = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
    End With
    ColName = 2
    ColAmount = 3
    
    On Error Resume Next
    For Each r In rAll
        Amount = Application.VLookup(r, Rng, ColAmount, 0)
        Name = Application.VLookup(r, Rng, ColName, 0)
        
        If IsError(Amount) Then
            Range("A" & Rows.Count).End(xlUp).Application.Selection.Font.ColorIndex = 3
            Range("A" & Rows.Count).End(xlUp).Application.Selection.Font.Bold = True
        Else
            r.Offset(0, 2) = Amount
        End If
        
        If IsError(Name) Then
            'MsgBox r.Offset(0, 0) & "  äÁèÁÕª×èÍÅÙ¡¤éÒã¹°Ò¹¢éÍÁÙÅ"
            'r.Offset(0, 0) = "" '·ÓãËé¢éÍÁÙÅ㹺ÃÃ·Ñ´ÊØ´ã¹ Column A à»ç¹ ÇèÒ§
            'r.Offset(0, 0).Activate '仺ÃÃ·Ñ´ÊØ´·éÒÂã¹ Column A
            Exit Sub
        Else
            r.Offset(0, 1) = Name
        End If
    Next r
End If
    
EndProcess:
    On Error GoTo 0
End Sub
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#11

Post by snasui »

:D แนบไฟล์ตัวอย่างมาดูกันครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#12

Post by akung »

snasui wrote::D แนบไฟล์ตัวอย่างมาดูกันครับ
รบกวนด้วยครับ
Attachments
Vlookup_VBA.xls
(40 KiB) Downloaded 89 times
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#13

Post by snasui »

:D ช่วยอธิบายเพิ่มเติมเป็นลำดับครับว่าผมต้องทดสอบอย่างไร ค่าทดสอบคือค่าใดบ้าง ผลลัพธ์ที่ต้องการคืออะไร การที่บอกว่าหาค่าที่เหมือนกันในคอลัมน์ A หาค่าใดในช่วงข้อมูลใด หากเจอ ต้องการให้แสดงผลอย่างไร หากไม่เจอ ต้องการให้แสดงผลอย่างไร
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#14

Post by akung »

snasui wrote::D ช่วยอธิบายเพิ่มเติมเป็นลำดับครับว่าผมต้องทดสอบอย่างไร ค่าทดสอบคือค่าใดบ้าง ผลลัพธ์ที่ต้องการคืออะไร การที่บอกว่าหาค่าที่เหมือนกันในคอลัมน์ A หาค่าใดในช่วงข้อมูลใด หากเจอ ต้องการให้แสดงผลอย่างไร หากไม่เจอ ต้องการให้แสดงผลอย่างไร
ขออภัยครับ

คือพอเราคีย์ข้อมูลใน Sheet2 ColumnA ที่ช่อง A1 = 12345 ระบบจะดึงข้อมูลจาก Sheets1 ColumnB และ ColumnC มาใส่ใน Sheets2 ColumnB และ C (เปรียบเสมือ Vlookup)

ปัญหาที่ 1 นะครับ คือสมมุติว่า ผมคีย์ข้อมูลไป 100 รายแล้ว แต่บังเอิญว่ามีการคีย์ข้อมูลซ้ำเหมือนใน 100 ราย ที่คีย์ไปแล้ว อยากให้ระบบแจ้งว่ามีการคีย์ข้อมูลไปแล้วหรือข้อมูลซ้ำกับในข้อมูลที่คีย์ไป

ปัญหาที่ 2 คือพอเราคีย์ข้อมูลใน Sheet2 ColumnA สมมุติที่ช่อง A101 = 12349 ระบบจะเข้าไปค้นหาแล้วดึงข้อมูลมา แต่บังเอิญว่า รหัส 12349 ไม่มีในฐานข้อมูล ก็ขอให้ระบบ ทำให้ รหัส 12349 เป็นตัวสีแดง และเป็นตัวหนา เพื่อให้เห็นความแตกต่างกันระหว่าง ข้อมูลที่มีในฐานข้อมูลหลัก (Sheets1) กับข้อมูลที่ไม่มีในฐานข้อมูลหลัก

สรุปครับ หลักการคือ

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

รบกวนด้วยครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#15

Post by akung »

akung wrote:
snasui wrote::D ช่วยอธิบายเพิ่มเติมเป็นลำดับครับว่าผมต้องทดสอบอย่างไร ค่าทดสอบคือค่าใดบ้าง ผลลัพธ์ที่ต้องการคืออะไร การที่บอกว่าหาค่าที่เหมือนกันในคอลัมน์ A หาค่าใดในช่วงข้อมูลใด หากเจอ ต้องการให้แสดงผลอย่างไร หากไม่เจอ ต้องการให้แสดงผลอย่างไร
ขออภัยครับ

คือพอเราคีย์ข้อมูลใน Sheet2 ColumnA ที่ช่อง A1 = 12345 ระบบจะดึงข้อมูลจาก Sheets1 ColumnB และ ColumnC มาใส่ใน Sheets2 ColumnB และ C (เปรียบเสมือ Vlookup)

ปัญหาที่ 1 นะครับ คือสมมุติว่า ผมคีย์ข้อมูลไป 100 รายแล้ว แต่บังเอิญว่ามีการคีย์ข้อมูลซ้ำเหมือนใน 100 ราย ที่คีย์ไปแล้ว อยากให้ระบบแจ้งว่ามีการคีย์ข้อมูลไปแล้วหรือข้อมูลซ้ำกับในข้อมูลที่คีย์ไป

ปัญหาที่ 2 คือพอเราคีย์ข้อมูลใน Sheet2 ColumnA สมมุติที่ช่อง A101 = 12349 ระบบจะเข้าไปค้นหาแล้วดึงข้อมูลมา แต่บังเอิญว่า รหัส 12349 ไม่มีในฐานข้อมูล ก็ขอให้ระบบ ทำให้ รหัส 12349 เป็นตัวสีแดง และเป็นตัวหนา เพื่อให้เห็นความแตกต่างกันระหว่าง ข้อมูลที่มีในฐานข้อมูลหลัก (Sheets1) กับข้อมูลที่ไม่มีในฐานข้อมูลหลัก

สรุปครับ หลักการคือ

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

รบกวนด้วยครับ
เพิ่มเติมนิดครับ ลืมตอบคำถามอาจารย์เรื่องใช้ค่าใดในการทดสอบ ค่าที่ใช้ในการทดสอบอยู่ใน sheets1 ครับ ผมทำไว้ 4 รายการครับ

A B C
12345 นาย ก. 100
67890 นาย ข. 200
11111 นาย ค. 300
22222 นาย จ. 400

ค่าที่ใช้ในการทดสอบ ก็คือ ColumnA ครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#16

Post by snasui »

:D ลองดูตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range
    Dim rCheck As Range
    Dim ColAmount As Integer
    Dim ColName As Integer
    Dim lng As Long
    If Target.Column = 1 Then
        With Sheets("Sheet2")
            Set rCheck = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
        End With
        With Sheets("Sheet1")
            Set Rng = .Range("A1", .Range("C" & Rows.Count).End(xlUp))
        End With
        ColName = 2
        ColAmount = 3
        On Error Resume Next
        lng = Application.CountIf(Rng.Resize(, 1), Target)
        If lng >= 1 Then
            If Application.CountIf(Target, rCheck) > 1 Then
                MsgBox ("Double!!!")
            End If
            Target.Offset(0, 2) = Application.VLookup(Target, Rng, ColAmount, 0)
            Target.Offset(0, 1) = Application.VLookup(Target, Rng, ColName, 0)
        Else
             Target.Font.Color = vbRed
             Target.Font.Bold = True
        End If
    End If
End Sub
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#17

Post by akung »

snasui wrote::D ลองดูตัวอย่าง Code ตามด้านล่างครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range
    Dim rCheck As Range
    Dim ColAmount As Integer
    Dim ColName As Integer
    Dim lng As Long
    If Target.Column = 1 Then
        With Sheets("Sheet2")
            Set rCheck = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
        End With
        With Sheets("Sheet1")
            Set Rng = .Range("A1", .Range("C" & Rows.Count).End(xlUp))
        End With
        ColName = 2
        ColAmount = 3
        On Error Resume Next
        lng = Application.CountIf(Rng.Resize(, 1), Target)
        If lng >= 1 Then
            If Application.CountIf(Target, rCheck) > 1 Then
                MsgBox ("Double!!!")
            End If
            Target.Offset(0, 2) = Application.VLookup(Target, Rng, ColAmount, 0)
            Target.Offset(0, 1) = Application.VLookup(Target, Rng, ColName, 0)
        Else
             Target.Font.Color = vbRed
             Target.Font.Bold = True
        End If
    End If
End Sub
ผลการทดสอบครับอาจารย์ Error ที่บรรทัด If Target.Column = 1 Then ครับ ผมเลยลองเปลี่ยนเป็น If Range("A" & Rows.Count).End(xlUp) <> "" Then
ไม่ Error แต่ผลลัพธ์ก็ไม่ออกครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#18

Post by snasui »

:? มันไม่ควรจะ Error ครับ ผมทดสอบแล้วเป็นปกติ Code นั้นผมเขียนเพื่อดักว่าการป้อนข้อมูลให้ป้อนที่คอลัมน์ A เท่านั้น สามารถลบออกหรือ Mark เป็น Comment ออกไปก็ได้ครับ และอย่าลืม Mark End If ออกไปด้วยครับ
akung
Member
Member
Posts: 159
Joined: Sun Mar 11, 2012 10:20 am

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#19

Post by akung »

snasui wrote::? มันไม่ควรจะ Error ครับ ผมทดสอบแล้วเป็นปกติ Code นั้นผมเขียนเพื่อดักว่าการป้อนข้อมูลให้ป้อนที่คอลัมน์ A เท่านั้น สามารถลบออกหรือ Mark เป็น Comment ออกไปก็ได้ครับ และอย่าลืม Mark End If ออกไปด้วยครับ
ผม Mark เป็น Commnet แล้วครับ แต่ผลลัพธ์ก็ไม่ออกครับ คือผมลองคีย์ 12345 ระบบควรจะดึงข้อมูลมาแต่ไม่มีครับ ผมลองทั้ง 2003 และ 2007 ผลลัพธ์ก็ไม่ออกเหมือนเดิมครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31191
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: รบกวนขอ Code VBA ที่เหมือนคำสั่ง Vlookup หน่อยครับ

#20

Post by snasui »

:D มันจะดึงข้อมูลมาให้ได้ก็ต่อเมื่อค่าที่คีย์เป็นประเภทเดียวกัน เช่นเป็นตัวเลขเหมือนกัน เป็น Text เหมือนกัน จากไฟล์ที่แนบมาได้กำหนดให้เป็น Text แต่ต้นทางเป็น Number ครับ การ Lookup และการ Match ต้องคำนึงถึงสิ่งเหล่านี้เป็นลำดับแรกเสมอจะลืมไม่ได้ครับ
Post Reply