Page 1 of 1
ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Mon Jan 08, 2024 10:40 pm
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 และค่าที่แสดงไม่ตรงกับที่ต้องการ
ขอความอนุเคราะห์ชี้แนะด้วย ขอบพระคุณครับ
Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Tue Jan 09, 2024 1:29 pm
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
Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Tue Jan 09, 2024 4:08 pm
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 หายไปครับ รกกวนแนะนำด้วยครับ ขอบพระคุณครับ
Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Tue Jan 09, 2024 4:26 pm
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
Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Tue Jan 09, 2024 4:58 pm
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
Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Tue Jan 09, 2024 5:15 pm
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
Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Wed Jan 10, 2024 7:31 pm
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
Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Wed Jan 10, 2024 9:11 pm
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
Re: ขออนุญาตสอบถาการใช้ Vlookup ใน vba เพื่อหาค่าที่ตรงตามเงื่อนไข
Posted: Thu Jan 11, 2024 10:25 am
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
ใช้งานได้แล้วครับ ขอบพระคุณครับอาจารย์