Page 1 of 1
อธิบายการทำงานของ .Find ให้หน่อยครับ
Posted: Wed Jan 30, 2019 9:44 am
by 4ko6yon61
Code: Select all
Dim WorkArea As Range
Do
Set WorkArea = Range("A1:D10").Find("Fail", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows)
If Not WorkArea Is Nothing Then Rows(WorkArea.row).EntireRow.Hidden = True
Loop Until WorkArea Is Nothing
จาก code กำหนด WorkArea เป็น Range("A1:D10") และให้หาค่า "Fail"
อยากสอบถามว่า .Find หากไม่เจอ "Fail" ส่งค่ากลับ มาเป็น อะไร
และอธิบาย If Not..............Is Nothing Then ให้หน่อยครับ
จะเขียน code ใหม่ ให้ซ่อนแถวที่ไม่เจอ "Fail"
คล้ายๆ กับ คำสั่ง การกรองแบบมีเงื่อนไขครับ
FilterFail.xlsm
ขอบคุณครับ
Re: อธิบายการทำงานของ .Find ให้หน่อยครับ
Posted: Wed Jan 30, 2019 8:21 pm
by snasui
4ko6yon61 wrote: Wed Jan 30, 2019 9:44 am
จาก code กำหนด WorkArea เป็น Range("A1:D10") และให้หาค่า "Fail"

ไม่ได้มีลักษณะเช่นนั้นครับ
แต่หมายถึงให้หาคำว่า "Fail" ในช่วง A1:D10 เมื่อเจอแล้วให้กำหนดค่าที่เจอให้เป็นตัวแปร WorkArea แต่ถ้าหากไม่เจอ ค่าของตัวแปร WorkArea จะเป็น Nothing คือไม่ถูกกำหนดให้เป็นค่าใด
สำหรับการกำหนดค่าให้กับ Object หากว่า Object นั้นมีการกำหนดค่าให้แล้วก็จะเป็น Object ใด ๆ ตามที่เราประกาศตัวแปร แต่หากไม่ได้กำหนดค่าก็จะเป็น Nothing ครับ
4ko6yon61 wrote: Wed Jan 30, 2019 9:44 am
If Not WorkArea Is Nothing Then
แปลว่าถ้าค่าตัวแปร WorkArea ไม่ใช่ Nothing แล้ว...
If not แปลว่า ถ้าไม่ใช่ และ Is Nothing แปลว่า เป็นค่า Nothing

ตัวอย่าง Code ครับ
Code: Select all
'Other code
Dim t As String
Dim r As Range
For Each r In Range("a1:d10")
If r.Value = "fail" Then
t = t & "," & r.Address
End If
Next r
Range(Mid(t, 2)).EntireRow.Hidden = True
'Other code
Re: อธิบายการทำงานของ .Find ให้หน่อยครับ
Posted: Thu Jan 31, 2019 11:28 pm
by 4ko6yon61
Code: Select all
Sub test()
Dim t As String
Dim r As Range
For k = 1 To 10
Set r = Range("A" & k & ":D" & k).Find("Fail", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows)
If r Is Nothing Then Rows(k).Hidden = True
Next k
End Sub
ขอบคุณมากครับ เข้าใจขึ้นเยอะเลย ตอนนี้เอามาดัดแปลงได้ตามที่ต้องการละครับ
Re: อธิบายการทำงานของ .Find ให้หน่อยครับ
Posted: Thu Jan 31, 2019 11:51 pm
by puriwutpokin
4ko6yon61 wrote: Thu Jan 31, 2019 11:28 pm
Code: Select all
Sub test()
Dim t As String
Dim r As Range
For k = 1 To 10
Set r = Range("A" & k & ":D" & k).Find("Fail", LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows)
If r Is Nothing Then Rows(k).Hidden = True
Next k
End Sub
ขอบคุณมากครับ เข้าใจขึ้นเยอะเลย ตอนนี้เอามาดัดแปลงได้ตามที่ต้องการละครับ
อีกตัวอย่างครับ
Code: Select all
Sub test()
For i = 1 To 10
If Application.CountIf(Range(Cells(i, "A"), Cells(i, "D")), "fail") = 0 Then Rows(i).Hidden = True
Next
End Sub

Re: อธิบายการทำงานของ .Find ให้หน่อยครับ
Posted: Fri Feb 01, 2019 1:32 am
by 4ko6yon61
CountIf นับค่า Fail ถ้า = 0 ก็ซ่อนแถวนั้นซ่ะ T-T
ขอบคุณมากครับ อ. พอจะมีหนังสือแนะนำหรือไม่ครับ เกี่ยวกับ ฟังก์ชั่น ของ VBA ผมคงต้องอ่านอีกเยอะ
Re: อธิบายการทำงานของ .Find ให้หน่อยครับ
Posted: Fri Feb 01, 2019 7:29 am
by snasui
4ko6yon61 wrote: Fri Feb 01, 2019 1:32 am
พอจะมีหนังสือแนะนำหรือไม่ครับ เกี่ยวกับ ฟังก์ชั่น ของ VBA

ฟังก์ชั่นของ VBA สามารถเปิด Help ของโปรแกรมได้เลยครับ
ยกตัวอย่าง การหาตัวอย่างการใช้ find
เปิด Excel > กดแป้น Alt+F11 > กดแป้น F1 > รอการเปิด Browser > ที่กล่อง Search ด้านซ้ายมือคีย์ Find > Enter
นอกจากนี้ยังสามาถค้นหาที่มุมขวาบนโดยคลิกรูปแว่นขยาย คีย์ข้อความที่ต้องการค้นหา
สำหรับหนังสือเพื่อการเรียนรู้ VBA มีจำนวนมาก หากต้องการศึกษาอย่างละเอียดควรอ่านตำราต่างประเทศ เช่นของ
John Walkenbach