: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

สอบถามเรื่อง Vlookup Record สุดท้ายครับ

ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
vichaim
Member
Member
Posts: 40
Joined: Thu Sep 08, 2016 4:15 pm

สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#1

Post by vichaim »

คือผมให้โปรแกรมตรวจสอบว่า ที่ User มีการคีย์เข้ามาในระบบ มีเลขบัญชีนี้หรือไม่ ถ้ามีให้นำ Record ล่าสุดมาแสดงว่าได้ดำเนินการไปเมื่อวันที่เท่าไร
ตาม Code นี้ครับ

MsgBox ("ลูกค้าเคยขอข้อมูลเมื่อวันที่ " & Format(Application.VLookup(Target, Rng1, DateB, 0), "dd/mm/yyyy") & " " & Application.VLookup(Target, Rng1, ColNameE, 0))

แต่พอมีข้อมูลมากกว่า 1 Record ระบบก็จะดึงข้อมูลแรกมาให้ซึ่งไม่ถูกต้องตามที่ต้องการครับ ผมควรจะคำสั่งอะไรสำหรับกรณีแบบนี้ดีครับ ขอบคุณครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#2

Post by snasui »

:D การโพสต์ Code ให้อ่านวิธีการตามกฎการใช้บอร์ดข้อ 5 ด้านบนเพื่อสะดวกต่อการอ่านครับ

สำหรับการ Lookup รายการสุดท้ายด้วยฟังก์ชั่น Vlookup ให้เปลี่ยนเลข 0 (ส่วนประกอบสุดท้าย ใน Vlookup) ให้เป็น 1 หรือลบทิ้งไปครับ

เมื่อกำหนดเช่นนี้ การที่จะได้รายการสุดท้ายมานั้นมีข้อกำหนดว่า คอลัมน์แรกของ Rng1 จะต้องเรียงจากน้อยไปหามากเท่านั้นครับ
vichaim
Member
Member
Posts: 40
Joined: Thu Sep 08, 2016 4:15 pm

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#3

Post by vichaim »

ขอบคุณครับ เดี่ยวจะลองดูครับ
vichaim
Member
Member
Posts: 40
Joined: Thu Sep 08, 2016 4:15 pm

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#4

Post by vichaim »

ไม่ได้คับ เอาข้อมูลของ Record อื่นมาแทนครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#5

Post by snasui »

:D แนบไฟล์พร้อมแสดงตัวอย่างคำตอบที่ถูกต้องมาด้วยจะได้เข้าใจตรงกันว่ากำลังจะทำอะไร ที่ชีตใด เซลล์ใด อย่างไร เช่นนี้เป็นต้นครับ
Politic
Member
Member
Posts: 1
Joined: Thu Sep 08, 2016 7:45 pm

Re:ขอสูตรอัตราการคำนวณภาษีเงินได้ ปี 2558-2559

#6

Post by Politic »

อัตราภาษี
0-150000 ยกเว้น
150000-300000 5%
300000-500000 10%
500000-750000 15%
750000-1000000 20%
1000000-2000000 25%
2000000-4000000 30%
4000000 ขึ้นไป 35%
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: Re:ขอสูตรอัตราการคำนวณภาษีเงินได้ ปี 2558-2559

#7

Post by snasui »

Politic wrote:อัตราภาษี
0-150000 ยกเว้น
150000-300000 5%
300000-500000 10%
500000-750000 15%
750000-1000000 20%
1000000-2000000 25%
2000000-4000000 30%
4000000 ขึ้นไป 35%
:D คำถามนี้ไม่เกียวกับกระทู้เดิม ให้ตั้งกระทู้ใหม่ครับ
vichaim
Member
Member
Posts: 40
Joined: Thu Sep 08, 2016 4:15 pm

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#8

Post by vichaim »

จากตัวอย่างถ้าพิมพ์ 123457 จะต้องได้ ข้อความเป็นวันที่ 04/08/2016 แต่ระบบไปดึง Record แรกมากลายเป็น 03/08/2016 ซึ่งผิดครับ รบกวนด้วยครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#9

Post by snasui »

:D คุณ vichaim ยังไม่ได้ทำตามที่ผมแจ้งไปตามด้านล่างครับ
snasui wrote: :D สำหรับการ Lookup รายการสุดท้ายด้วยฟังก์ชั่น Vlookup ให้เปลี่ยนเลข 0 (ส่วนประกอบสุดท้าย ใน Vlookup) ให้เป็น 1 หรือลบทิ้งไปครับ
vichaim
Member
Member
Posts: 40
Joined: Thu Sep 08, 2016 4:15 pm

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#10

Post by vichaim »

ผมทำแล้วทดสอบไปแล้วครับ ทั้ง 2 แบบ คือ เป็น 0 และลบทิ้ง ก็ไม่ได้ตามที่ต้องการครับ ผมเลยส่ง Code เดิมที่เขียนไว้แต่แรกมาให้ดูครับ
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#11

Post by snasui »

:D หากเป็นเช่นนั้นให้ลบ 0 ใน Vlookup ทิ้งทั้งหมด ทดสอบแล้วส่งมาใหม่อีกรอบครับ

การที่ลบ 0 ทิ้งแล้วยังได้ค่าแรกย่อมผิดปกติ ผิดหลักการทำงานของ Vlookup ครับ
vichaim
Member
Member
Posts: 40
Joined: Thu Sep 08, 2016 4:15 pm

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#12

Post by vichaim »

ทำการลบ 0 ด้านหลังออกแล้วครับ แต่ข้อมูลที่ได้ก็ยังไม่ถูกต้องครับ
จากการทดสอบเหมือนว่า เอา 0 ออกแล้วมันจะดึงข้อมูล Record ที่ 3 มาแสดง ถ้ามามีมากกว่านั้นจะผิดทันทีครับ
You do not have the required permissions to view the files attached to this post.
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#13

Post by snasui »

:D เนื่องจาก Rng1 ไม่เป็นไปตามกฎด้านล่างครับ
snasui wrote:สำหรับการ Lookup รายการสุดท้ายด้วยฟังก์ชั่น Vlookup ให้เปลี่ยนเลข 0 (ส่วนประกอบสุดท้าย ใน Vlookup) ให้เป็น 1 หรือลบทิ้งไปครับ

เมื่อกำหนดเช่นนี้ การที่จะได้รายการสุดท้ายมานั้นมีข้อกำหนดว่า คอลัมน์แรกของ Rng1 จะต้องเรียงจากน้อยไปหามากเท่านั้นครับ
ตัวอย่างการปรับ Code

Code: Select all

'Other code
lng1 = Application.CountIf(Rng1.Resize(, 1), Target)
If lng1 >= 1 Then ' ตรวจสอบข้อมูลเดิมว่าเคยขอหรือเปล่า
    For i = Rng1.Columns(1).Rows.Count To 1 Step -1
       If Rng1.Columns(1).Cells(i) = Target Then
            a = Rng1.Columns(1).Cells(i).Offset(0, 3).Value
            Exit For
       End If
    Next i
    MsgBox ("ลูกค้าเคยขอข้อมูลเมื่อวันที่  " & Format(a, "dd/mm/yyyy"))
 'Other code
Other code หมายถึง code เดิมครับ
menem
Silver
Silver
Posts: 549
Joined: Mon Jan 26, 2015 11:02 am

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#14

Post by menem »

เท่าที่ทดลองทำดู ผมไม่สามารถทำให้ VBA ใช้งาน WorksheetFunction Lookup ได้เลย
โดยจะขึ้น Type Mismatch ตลอดเวลา
เลยตัดสินใจเปลี่ยนจากการให้ทำงานใน VBA ทั้งหมด มาเป็นอาศัย Cell บน Worksheet ทำงาน
ในส่วนนี้แทน ( ฝากไว้ที่ Cell : L1 )

หมายเหตุ : ผมไม่แน่ใจว่าช่อง Eng Name จะสื่ออะไรหรือไม่ก็เลยแก้ไข Code ในการดึงนิดหน่อย
แต่ถ้าไม่ใช่ประเด็น จะใช้ Code เดิมก็ได้ครับ

Code: Select all

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Rng As Range
    Dim Rng1 As Range
    Dim Rng2 As Range
    Dim Rng3 As Range
    Dim rCheck As Range
    Dim ColName As Integer
    Dim ColNameE As Integer
    Dim DateB As Integer 'Çѹ·Õè¢ÍàÍ¡ÊÒÃ
    Dim Max As Integer

    
    Dim lng As Long
    Dim lng1 As Long
    
    If Target.Count > 1 Then Exit Sub
         If Target.Column = 3 Then
         
            TRow = Target.Row - 1
        
            With Sheets("AddData")
                Set rCheck = .Range("A1", .Range("A" & Rows.Count).End(xlUp))
            End With
        
            With Sheets("Data")
                Set Rng = .Range("A1", .Range("D" & Rows.Count).End(xlUp)) 'Range D ¤×Í Column ÊØ´·éÒ·Õè´Ö§
            End With
            
            With Sheets("AddData")
                Set Rng1 = .Range("C1", .Range("F" & Rows.Count).End(xlUp)) '´Ö§ Column C ¶Ö§ F
            End With
            
            With Sheets("AddData")
                Set Rng2 = .Range("C1:C" & TRow) '´Ö§ Column C ÁÒ 1 Column
            End With
            
            With Sheets("AddData")
                Set Rng3 = .Range("F1:F" & TRow) '´Ö§ Column F ÁÒ 1 Column
            End With
            
            With Sheets("AddData")
                Set Rng4 = .Range("E1:E" & TRow) '´Ö§ Column F ÁÒ 1 Column
            End With
            

            ColName = 2
            ColNameE = 3
            DateB = 4
            
                            
            lng = Application.CountIf(Rng.Resize(, 1), Target)
        
            If lng >= 1 Then
                Sheet11.Unprotect 1234
                If Target.Offset(0, 0) <> "" Then '¶éÒ Column äÁèà·èҡѺÇèÒ§ ãËé·Ó
                    lng1 = Application.CountIf(Rng1.Resize(, 1), Target)
                    If lng1 >= 1 Then ' µÃǨÊͺ¢éÍÁÙÅà´ÔÁÇèÒà¤Â¢ÍËÃ×Íà»ÅèÒ
                    
                    Range("L1").Formula = "=Lookup(2, 1 /(" & Rng2.Address & "=" & Target & ")," & Rng3.Address & ")"
                    FndVal = Range("L1").Value
                    Range("L1").Formula = "=Lookup(2, 1 /(" & Rng2.Address & "=" & Target & ")," & Rng4.Address & ")"
                    FndVal2 = Range("L1").Value
                    Range("L1").ClearContents
                    
                    
                        'MsgBox ("ÅÙ¡¤éÒà¤Â¢Í¢éÍÁÙÅàÁ×èÍÇѹ·Õè  " & Format(Application.VLookup(Target, Rng1, DateB, 0), "dd/mm/yyyy") & "  " & Application.VLookup(Target, Rng1, ColNameE, 0))
                        
                        MsgBox ("ÅÙ¡¤éÒà¤Â¢Í¢éÍÁÙÅàÁ×èÍÇѹ·Õè  " & WorksheetFunction.Text(FndVal, "dd/mm/yyyy") & "  " & FndVal2)
                        
                        Target.Offset(0, 2) = Application.VLookup(Target, Rng1, ColNameE, 0) 'àÍÒª×èÍÍѧ¡Äɢͧà¡èÒÁÒãÊè
                        Target.Offset(0, 3).Activate 'ä»·ÕèªèͧãÊèÇѹ·Õè¢éÍÁÙÅ·Õèµéͧ¡ÒÃ
                    End If
                    Target.Offset(0, 1) = Application.VLookup(Target, Rng, ColName, 0)
                    'Target.Offset(0, -1) = Now() 'Format(Now(), "dd/mm/yyyy") '¡Ó˹´ãËé Column B = Çѹ·Õè»Ñ¨¨ØºÑ¹
                    Target.Offset(0, -1) = Date
                    Target.Offset(0, -2) = Target.Offset(-1, -2) + 1 'ãËé Column A ÃѹàÅ¢ NO.
                    If Target.Offset(0, 2) = "" Then
                        Target.Offset(0, 2).Activate 'ãËéä»·Õè Column ¶Ñ´ä»
                    Else
                        Target.Offset(0, 3).Activate
                    End If
                Else
                    Target.Offset(0, -1) = ""
                    Target.Offset(0, -2) = ""
                    Target.Offset(0, 1) = ""
                    Target.Offset(0, 2) = ""
                    Target.Offset(0, 3) = ""
                    Target.Offset(0, 4) = ""
                    Target.Offset(0, 5) = ""
                    Target.Offset(0, 6) = ""
                    Target.Offset(0, 7) = ""
                    Target.Offset(0, 0).Activate
                End If
            Else
                '¶éÒäÁèÁÕã¹°Ò¹¢éÍÁÙÅ
                If Target.Offset(0, 0) <> "" Then
                    MsgBox ("àÅ¢·ÕèºÑ­ªÕ¹ÕéäÁèÁÕã¹°Ò¹¢éÍÁÙÅ")
                End If
                Sheet11.Unprotect 1234
                Target.Offset(0, -1) = ""
                Target.Offset(0, -2) = ""
                Target.Offset(0, 1) = ""
                Target.Offset(0, 2) = ""
                Target.Offset(0, 3) = ""
                Target.Offset(0, 4) = ""
                Target.Offset(0, 5) = ""
                Target.Offset(0, 6) = ""
                Target.Offset(0, 7) = ""
                Target.Offset(0, 0).Activate
                Sheet11.Protect 1234
            End If
        End If
        
        If Target.Column = 5 Then
            Target.Offset(0, 1).Activate
        End If
            
        If Target.Column = 6 Then
            Target.Offset(0, 1).Activate
        End If
            
        If Target.Column = 7 Then
            Target.Offset(0, 1).Activate
        End If
            
        If Target.Column = 8 Then
            Target.Offset(0, 1).Activate
        End If
            
        If Target.Column = 9 Then
            If Target.Offset(0, 0) <> "" Then
                If Target.Offset(0, 0) = 0 Then
                    Target.Offset(0, 1) = 0
                    Target.Offset(1, -6).Activate
                Else
                    Target.Offset(0, 1) = Target.Offset(0, -2) / Target.Offset(0, 0) 'Colume ·Õè7 à·èҡѺ Colume ·Õè 4 ËÒà Colume ·Õè6
                End If
            End If
        End If
    
        If Target.Column = 10 Then
            Target.Offset(1, -7).Activate
        End If
        
End Sub

vichaim
Member
Member
Posts: 40
Joined: Thu Sep 08, 2016 4:15 pm

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#15

Post by vichaim »

ขอบคุณ Admin และคุณmenem มากครับที่ให้ความสนใจในการทดสอบ ผมได้นำ Code ของ Admin ไปทดสอบแล้วครับ ใช้ได้ผลดีครับ ส่วน Code ของคุณmenem เดี่ยวผมจะไปทดสอบดูครับ ขอบคุณทุกท่านที่ให้ความสนใจครับ ขอบคุณครับ

ปล. ถ้าไม่เป็นการรบกวน ผมอยากให้ Admin ช่วยอธิบาย Code ช่วงนี้หน่อยครับ ขอบคุณครับ

Code: Select all

             For i = Rng1.Columns(1).Rows.Count To 1 Step -1
             If Rng1.Columns(1).Cells(i) = Target Then
            	 a = Rng1.Columns(1).Cells(i).Offset(0, 3).Value
             	 Exit For
             End If
User avatar
snasui
Site Admin
Site Admin
Posts: 31258
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#16

Post by snasui »

:D เป็นการ Loop ทุกค่าในคอลัมน์แรกของตัวแปร Rng1 โดยเป็นการ Loop จากตัวท้ายสุดไปตัวแรกครับ

Rng1.Columns(1).Rows.Count นับว่าคอลัมน์แรกของตัวแปร Rng1 มีกี่ตัว

For i = Rng1.Columns(1).Rows.Count To 1 Step -1 เป็นการ Loop จากตัวสุดท้ายไปยังตัวแรกสุด

a = Rng1.Columns(1).Cells(i).Offset(0, 3).Value กำหนดค่าให้กับตัวแปร a โดยให้ค่าเท่ากับค่าที่ถัดไปจากคอลัมน์แรก 3 คอลัมน์
vichaim
Member
Member
Posts: 40
Joined: Thu Sep 08, 2016 4:15 pm

Re: สอบถามเรื่อง Vlookup Record สุดท้ายครับ

#17

Post by vichaim »

ขอบคุณ Admin มากครับ เทคนิคนี้จะได้นำไปใช้งานอื่นต่อได้ครับ ขอบคุณครับ
Post Reply