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"
:D ไม่ได้มีลักษณะเช่นนั้นครับ

แต่หมายถึงให้หาคำว่า "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

:D ตัวอย่าง 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
:D

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
:D ฟังก์ชั่นของ VBA สามารถเปิด Help ของโปรแกรมได้เลยครับ

ยกตัวอย่าง การหาตัวอย่างการใช้ find

เปิด Excel > กดแป้น Alt+F11 > กดแป้น F1 > รอการเปิด Browser > ที่กล่อง Search ด้านซ้ายมือคีย์ Find > Enter

นอกจากนี้ยังสามาถค้นหาที่มุมขวาบนโดยคลิกรูปแว่นขยาย คีย์ข้อความที่ต้องการค้นหา

สำหรับหนังสือเพื่อการเรียนรู้ VBA มีจำนวนมาก หากต้องการศึกษาอย่างละเอียดควรอ่านตำราต่างประเทศ เช่นของ :arrow: John Walkenbach