Page 1 of 1

code vba ค้นหาข้อมูลแบบตรงตัว หรือครบทุกตัว ตามเงื่อนไข

Posted: Wed Feb 12, 2014 5:30 pm
by tutape
ผมได้ลองเขียน code vba ในการค้นหาข้อมูลแบบมีเงื่อนไข โดย code ที่ผมลองฝึกเขียนเป็นดังนี้

Code: Select all

 If Range("d4") = "" Then Exit Sub
            If Sheets("db_bank").Columns("A:A").find(Range("d4"), LookIn:=xlValues) Is Nothing Then
            Sheets("change_save").Range("j4:j9").Value = ""
            MsgBox "ไม่มีหมายเลขนี้"
            Sheets("change_save").Range("c2").Select
            Else
เมื่อผมลองรันแมโคร ผลปรากฎว่าไม่เป็นตามที่ต้องการ คือ ผมต้องการให้คีย์ ข้อมูลเงื่อนไขในเซลล์ d4 ให้ค้นหาข้อมูลที่ตรงตามเงื่อนไขทุกประการ จึงจะแสดงข้อมูล ถ้าไม่ตรงเงื่อนไขหรือไม่เหมือนเงื่อนไข ให้แจ้งว่า ไม่มีหมายเลขนี้
แต่ code ของผมด้านบน ขอแค่แค่ผมคีย์เลขในช่อง d4 เช่น คีย์ 123 ซึ่งในฐานข้อมูลไม่มีเลข 123 แต่ผลที่ได้คือ สูตรจะดึงเอาข้อมูลที่ใกล้เคียงมาแสดงให้ เช่น ในฐานข้อมูลมีเลข 212345 สูตรก็จะเอาข้อมูลของเลขนี้มาแสดงให้ ซึ่งจริงๆ แล้ว เลขที่ให้ค้นข้อมูล คือ 123 กับเลขที่มีในฐานข้อมูลคือ 212345 เป็นเลขคนละตัวกัน
ผมจะต้องปรับ code หรือแก้ไขอย่างไรคับ ซึ่งผมเองคิดว่า code ที่น่าจะผิดพลาด คือ บรรทัด
If Sheets("db_bank").Columns("A:A").find(Range("d4"), LookIn:=xlValues) Is Nothing Then

ขอบคุณครับ

Re: code vba ค้นหาข้อมูลแบบตรงตัว หรือครบทุกตัว ตามเงื่อนไข

Posted: Wed Feb 12, 2014 7:02 pm
by snasui
:D การค้นหาตาม Code นั้นเป็นการค้นหาในบางส่วนของคำก็ได้ ทั้งคำก็ได้ จึงไม่ตรงตามที่ต้องการครับ

สำหรับการค้นหาแบบตรงตัวสามารถใช้ได้หลายแบบ เช่นการใช้สูตร Match เข้าช่วย (Application.Match...) หรือ การ Loop ด้วย For...Next เป็นต้น

Re: code vba ค้นหาข้อมูลแบบตรงตัว หรือครบทุกตัว ตามเงื่อนไข

Posted: Wed Feb 12, 2014 7:08 pm
by tutape
แล้วผมควรจะปรับสูตรบรรทัดนั้นอย่างไรครับ
แนะนำด้วยครับ :D

Re: code vba ค้นหาข้อมูลแบบตรงตัว หรือครบทุกตัว ตามเงื่อนไข

Posted: Wed Feb 12, 2014 7:29 pm
by snasui
:D ลองปรับมาตามที่ผมตอบให้ก่อนครับ ได้ผลหรือไม่ได้อย่างไร แนบไฟล์ตัวอย่างมาถามกันต่อครับ

Re: code vba ค้นหาข้อมูลแบบตรงตัว หรือครบทุกตัว ตามเงื่อนไข

Posted: Wed Feb 12, 2014 8:06 pm
by tutape
ผมลองปรับ code ตามเอกสารที่อาจารย์แนะนำ คือ code นี้ครับ

Code: Select all

With Worksheets(1).Range("a1:a500") 
    Set c = .Find(2, lookin:=xlValues) 
    If Not c Is Nothing Then 
        firstAddress = c.Address 
        Do 
            c.Value = 5 
            Set c = .FindNext(c) 
        Loop While Not c Is Nothing And c.Address <> firstAddress 
    End If 
End With
แล้วปรับมาเป็นของผม ดังนี้

Code: Select all

Sub find_data()
With Sheets("db_bank").Columns("A:A")
    Set c = .find(Range("d4"), LookIn:=xlValues)
            If Range("d4") = "" Then Exit Sub
            If Not c Is Nothing Then
            Sheets("change_save").Range("j4:j9").Value = ""
            MsgBox "ไม่มีเลขนี้"
            Sheets("change_save").Range("c2").Select
            Else
แต่พอรันแล้ว จะเกิดข้อผิดพลาดที่บรรทัด
Set c = .find(Range("d4"), LookIn:=xlValues)
ฟ้องว่า Compile error : Variable not defined
ผมเลยสงสัยว่า ทำแบบตัวอย่างแต่เกิด error
รบกวนอาจารย์อธิบายผมด้วยนะครับ
ขอบคุณครับ

Re: code vba ค้นหาข้อมูลแบบตรงตัว หรือครบทุกตัว ตามเงื่อนไข

Posted: Wed Feb 12, 2014 9:14 pm
by snasui
:D แนบไฟล์ตัวอย่างมาดูกันครับ

Re: code vba ค้นหาข้อมูลแบบตรงตัว หรือครบทุกตัว ตามเงื่อนไข

Posted: Wed Feb 12, 2014 9:54 pm
by tutape
ไฟล์แนบครับ

Re: code vba ค้นหาข้อมูลแบบตรงตัว หรือครบทุกตัว ตามเงื่อนไข

Posted: Wed Feb 12, 2014 11:55 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Dim i As Integer
Dim c As Range
Sub find_data()
    'On Error Resume Next
    With Sheets("db_bank").Columns("A:A")
        Set c = .find(Range("d4"), LookIn:=xlValues, LookAt:=xlWhole)
        If Range("d4") = "" Then Exit Sub
        If c Is Nothing Then
            Sheets("change_save").Range("j4:j9").Value = ""
            MsgBox "ไม่มีหมายเลขบัญชีนี้"
            Sheets("change_save").Range("c2").Select
        Else
            i = .find(c, LookIn:=xlValues, LookAt:=xlWhole).Row
            .Range("A" & i).Resize(1, 6).Copy
            Sheets("change_save").Range("j4").PasteSpecial xlPasteValues, Transpose:=True
            Application.CutCopyMode = False
            MsgBox "การสืบค้นข้อมูลสำเร็จ"
            Sheets("change_save").Range("c2").Select
        End If
    End With
End Sub