: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 ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

ฟอรัมถาม-ตอบปัญหาการใช้งาน MS Excel and 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. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
9KiTTi
Member
Member
Posts: 227
Joined: Thu Jun 28, 2012 3:46 pm
Excel Ver: 2016,2019

ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#1

Post by 9KiTTi »

ขออนุญาตสอบถามการใช้ Vlookup ใน vba โดยมีเงื่อนไขเปลี่ยนจากรหัสจังหวัดในชีท comp1 ถึง comp3 ของคอลัมม์ d เป็นชื่อจังหวัด เช่น เปลี่ยนรหัส 12 ในคอลัมม์ D8 ชีท comp1 เปลี่ยนเป็น นนทบุรี

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim itme As Long
    Dim otme As Long
    Application.DisplayAlerts = False
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("Main")
                With sh
                    cp = Application.Match("central", .Range("a1:a50000"), 0)
                    op = Application.Match("country", .Range("a5:a50000"), 0)
                End With
            If Application.CountIfs(.Range("b6:b30"), sh.Name) = 0 Then
                With .Range("b30").End(xlUp).Offset(1, 0)
                    .Value = sh.Name
                    .Offset(0, 2).Value = Application.VLookup(sh.Range("d" & cp & ":d" & op), 2, 0)
                End With
            End If
            End With
        End If
    Next sh
   Application.DisplayAlerts = True
End Sub
ผมพยายามเอา code จากงานตัวเก่ามาปรับแต่ยังไม่ได้ พอรัน vb ข้อมูลจะไปแสดงที่ชีท main และค่าที่แสดงไม่ตรงกับที่ต้องการ
ขอความอนุเคราะห์ชี้แนะด้วย ขอบพระคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#2

Post by puriwutpokin »

ลองปรับตามนี้ดูครับ

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("province")
              For Each r In sh.Range("d8:d99")
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("province").Range("a2:b79"), 2, 0), "Not foud")
                    Next r
            End With
        End If
    Next sh
   Application.DisplayAlerts = True
End Sub
:shock: :roll: :D
9KiTTi
Member
Member
Posts: 227
Joined: Thu Jun 28, 2012 3:46 pm
Excel Ver: 2016,2019

Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#3

Post by 9KiTTi »

puriwutpokin wrote: Tue Jan 09, 2024 1:29 pm ลองปรับตามนี้ดูครับ

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("province")
              For Each r In sh.Range("d8:d99")
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("province").Range("a2:b79"), 2, 0), "Not foud")
                    Next r
            End With
        End If
    Next sh
   Application.DisplayAlerts = True
End Sub
ผมได้ปรับตามที่อาจารย์แนะนำแล้วครับ ในส่วนของการแทนค่ารหัสจังหวัดด้วยชื่อจังหวัดสามารถทำได้แล้ว แต่พบปัญหาว่าหลังจากรัน macro พบว่าในส่วนของหัวคอลลัมม์ 'province' ในส่วนของข้อมูล Country หายไปครับ รกกวนแนะนำด้วยครับ ขอบพระคุณครับ
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#4

Post by puriwutpokin »

ปรับตามนี้ครับ

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("province")
              For Each r In sh.Range("d8:d10000")
              If Len(r.Text) < 3 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("province").Range("a2:b79"), 2, 0), " ")
            End If
                    Next r
            End With
        End If
:shock: :roll: :D
9KiTTi
Member
Member
Posts: 227
Joined: Thu Jun 28, 2012 3:46 pm
Excel Ver: 2016,2019

Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#5

Post by 9KiTTi »

puriwutpokin wrote: Tue Jan 09, 2024 4:26 pm ปรับตามนี้ครับ

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("province")
              For Each r In sh.Range("d8:d10000")
              If Len(r.Text) < 3 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("province").Range("a2:b79"), 2, 0), " ")
            End If
                    Next r
            End With
        End If

ติด error ไม่มี end sub ผมเพิ่มแล้วยังไม่หายครับ

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("province")
              For Each r In sh.Range("d8:d10000")
              If Len(r.Text) < 3 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("province").Range("a2:b79"), 2, 0), " ")
            End If
                    Next r
            End With
        End If
End Sub
You do not have the required permissions to view the files attached to this post.
9KiTTi
Member
Member
Posts: 227
Joined: Thu Jun 28, 2012 3:46 pm
Excel Ver: 2016,2019

Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#6

Post by 9KiTTi »

9KiTTi wrote: Tue Jan 09, 2024 4:58 pm
puriwutpokin wrote: Tue Jan 09, 2024 4:26 pm ปรับตามนี้ครับ

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("province")
              For Each r In sh.Range("d8:d10000")
              If Len(r.Text) < 3 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("province").Range("a2:b79"), 2, 0), " ")
            End If
                    Next r
            End With
        End If

ติด error ไม่มี end sub ผมเพิ่มแล้วยังไม่หายครับ

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("province")
              For Each r In sh.Range("d8:d10000")
              If Len(r.Text) < 3 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("province").Range("a2:b79"), 2, 0), " ")
            End If
                    Next r
            End With
        End If
End Sub
แก้ไขได้แล้วครับ ขอบพระคุณครับอาจารย์ code ที่แก้ไขครับ

Code: Select all

Sub paidpro()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("province")
              For Each r In sh.Range("d8:d10000")
              If Len(r.Text) < 3 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("province").Range("a2:b79"), 2, 0), " ")
            End If
            Next r
            End With
        End If
        Next sh
   Application.DisplayAlerts = True
End Sub
9KiTTi
Member
Member
Posts: 227
Joined: Thu Jun 28, 2012 3:46 pm
Excel Ver: 2016,2019

Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#7

Post by 9KiTTi »

ขออนุญาตสอบถามครับ ผมนำไปปรับใช้กับแผ่นงานจริง แต่ไม่สามารถใช้งานได้ ไม่สามารถแทนค่ารหัสในคอลัมม์ Q ของชีท rec1 และ rec2 ด้วยชื่อของหน่วยงานจากชีท hoscode คอลัมม์ B รบกวนขอคำแนะนำด้วยครับ ขอบพระคุณครับ

Code: Select all

Sub paidname()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 3 Then
            With Sheets("hoscode")
              For Each r In sh.Range("q10:q10000")
              If Len(r.Text) < 3 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("hoscode").Range("a2:b17553"), 2, 0), "ไม่พบข้อมูล")
            End If
            Next r
            End With
        End If
        Next sh
   Application.DisplayAlerts = True
End Sub
You do not have the required permissions to view the files attached to this post.
User avatar
puriwutpokin
Guru
Guru
Posts: 3792
Joined: Fri Jan 04, 2013 9:49 pm
Location: Bangkok
Excel Ver: MS.365

Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#8

Post by puriwutpokin »

ปรับตามนี้ดูครับ

Code: Select all

Sub paidname()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 2 Then
            With Sheets("hoscode")
              For Each r In sh.Range("q10:q10000")
              If Len(r.Text) = 5 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("hoscode").Range("a2:b17553"), 2, 0), "ไม่พบข้อมูล")
            End If
            Next r
            End With
        End If
        Next sh
   Application.DisplayAlerts = True
End Sub
:shock: :roll: :D
9KiTTi
Member
Member
Posts: 227
Joined: Thu Jun 28, 2012 3:46 pm
Excel Ver: 2016,2019

Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข

#9

Post by 9KiTTi »

puriwutpokin wrote: Wed Jan 10, 2024 9:11 pm ปรับตามนี้ดูครับ

Code: Select all

Sub paidname()
    Dim sh As Worksheet
    Dim r As Range
    Application.DisplayAlerts = False
    On Error Resume Next
    For Each sh In Worksheets
        If sh.Index > 2 Then
            With Sheets("hoscode")
              For Each r In sh.Range("q10:q10000")
              If Len(r.Text) = 5 Then
            r.Value = Application.IfError(Application. _
            VLookup(r.Text, Sheets("hoscode").Range("a2:b17553"), 2, 0), "ไม่พบข้อมูล")
            End If
            Next r
            End With
        End If
        Next sh
   Application.DisplayAlerts = True
End Sub
ใช้งานได้แล้วครับ ขอบพระคุณครับอาจารย์
Post Reply