Page 1 of 1

สอบถามเรื่องการ Vlookup ด้วย VBA ครับ

Posted: Fri Sep 23, 2016 12:59 pm
by vichaim

Code: Select all

Private Sub CommandButton1_Click()
Dim Rng As Range
Dim rCheck As Range
Dim Lrow7 As Integer
   

    Lrow7 = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row

    With Sheets("NetTrade")
        Set rCheck = .Range("I1", .Range("I" & Rows.Count).End(xlUp))
    End With
        
    With Sheets("Holiday")
        Set Rng = .Range("A1", .Range("B" & Rows.Count).End(xlUp)) 'Range B  คือ Column สุดท้ายที่ดึง
    End With
        
    ColName = 2
    
    Lrow7 = Lrow7 + 1
    Range("A" & Lrow7) = Date

    If Format(Range("A" & Lrow7), "dddd") = "Monday" Then
        Range("H" & Lrow7) = Range("A" & Lrow7) - 3
        Range("I" & Lrow7) = Range("H" & Lrow7) + 5

    ElseIf Format(Range("A" & Lrow7), "dddd") = "Friday" Then
        Range("H" & Lrow7) = Range("A" & Lrow7) - 1
        Range("I" & Lrow7) = Range("H" & Lrow7) + 5

    ElseIf Format(Range("A" & Lrow7), "dddd") = "Thursday" Then
        Range("H" & Lrow7) = Range("A" & Lrow7) - 1
        Range("I" & Lrow7) = Range("H" & Lrow7) + 5

    Else
        Range("H" & Lrow7) = Range("A" & Lrow7) - 1
        Range("I" & Lrow7) = Range("H" & Lrow7) + 3

    End If
    MsgBox (Range("I" & Lrow7))
    If Application.VLookup(Range("I" & Lrow7), Rng, 2, 0) = True Then 'ตรวจสอบว่ามีในฐานข้อมูลวันหยุดพิเศษหรือเปล่า
        If Format(Range("A" & Lrow7), "dddd") = "Monday" Then
            Range("H" & Lrow7) = Range("A" & Lrow7) - 3
            Range("I" & Lrow7) = Range("H" & Lrow7) + 6
        ElseIf Format(Range("A" & Lrow7), "dddd") = "Friday" Then
            Range("H" & Lrow7) = Range("A" & Lrow7) - 1
            Range("I" & Lrow7) = Range("H" & Lrow7) + 6
        ElseIf Format(Range("A" & Lrow7), "dddd") = "Thursday" Then
            Range("H" & Lrow7) = Range("A" & Lrow7) - 1
            Range("I" & Lrow7) = Range("H" & Lrow7) + 6
        Else
            Range("H" & Lrow7) = Range("A" & Lrow7) - 1
            Range("I" & Lrow7) = Range("H" & Lrow7) + 4
        End If
    Else
        MsgBox ("ไม่พบ")
    End If
End Sub

วิธีการคิดคำนวณวันคือจะนับจากวันปัจจุบันถอยหลัง 1 วัน
และทำการ + ไป 3 วัน
แต่ถ้าติดเสาร์อาทิตย์ จะต้อง + เพิ่มเป็น 5 วัน
แต่ถ้าตรงกับวันหยุดพิเศษด้วย ก็ต้อง + เพิ่มเป็น 6 วัน

ติดตรงที่ไม่สามารถตรวจสอบได้ว่าตรงกับวัดหยุดพิเศษ
หรือเปล่า เพราะเหมือนว่า Vlookup ไม่ได้ทำงาน
ซึ่งก็มีวันที่ใน Sheet วันหยุดพิเศษ (Holiday)

รบกวนช่วยตรวจสอบด้วยครับ ขอบคุณครับ

Re: สอบถามเรื่องการ Vlookup ด้วย VBA ครับ

Posted: Fri Sep 23, 2016 4:37 pm
by DhitiBank
ไม่แน่ใจว่าใช่อย่างที่ต้องการหรือเปล่าครับ ลองปรับโค้ดจาก
Application.VLookup(Range("I" & Lrow7), Rng, 2, 0) = True
เป็น
Application.CountIf(Rng, Range("i" & Lrow7).Value) > 0
ครับ

Re: สอบถามเรื่องการ Vlookup ด้วย VBA ครับ

Posted: Fri Sep 23, 2016 5:18 pm
by vichaim
ขอบคุณครับ ใช้วิธีนี้ก็ดีครับ