สวัสดีครับอาจารย์ และผู้ให้ความรู้ทุกท่าน ผมรบกวนขอความช่วยเหลือในเรื่องการ run code ช้ามากๆ เพราะข้อมูลเยอะ และการ copy โดยที่ไม่เอาข้อมูลที่ hide ไว้ครับ
ขอเกริ่นการทำงานก่อนนะครับ ผมแนบไฟล์มา 2 ไฟล์ คือ
1. ContactNo เป็นตัว runcode และวางข้อมูล
2. test P1-2021 ซึ่งเป็นไฟล์จำลองมาให้ทดสอบ code ครับ (ไฟล์จริงใหญ่มาก ข้อมูลใหญ่เกินไฟล์แนบ)
การทำงานคือ จะใส่ชื่อและที่อยู่ไฟล์ใน cell B3 เพื่อเป็นตัวเปิดไฟล์ข้อมูลครับ และ ใน cell B1 เป็นตัวอ้างอิงค้นหาข้อมูลในไฟล์ที่ 2 และเมื่อค้นหาเสร็จก็ทำการ copy ข้อมูลใน colume a มาวางใน cell A10 ของไฟล์แรก ซึ่งผมลองเขียน code แล้วทำงานได้ปกติตามต้องการ แต่...
1.ไฟล์จริงซึ่งมีขนาดใหญ่มาก จึงทำให้ใช้เวลาในการค้นหาและซ่อนแถวที่ไม่ใช้นานมากมีวิธีปรับ code ให้ทำการค้นหาได้เร็วขึ้นมั้ยครับ
2. เมื่อทำการค้นหาเสร็จแล้ว ซ่อนแถวที่ไม่ใช้ไว้ แต่เมื่อ copy ข้อมูลมาวาง มันมาทั้งหมดครับ ไม่ได้มาเฉพาะ cell ที่แสดง ถ้าเป็น manaul คือ กด F5 แล้วเลือก specail > visible cells only ได้ แต่ code vba ผมพยายามหาข้อมูลแล้วครับ แต่ไม่เจอจริงๆ
3. ไฟล์จริงจะมีข้อมูลย้อนหลังของปีเก่าอยู่ด้วย สามารถปรับ code ให้ค้นหาเฉพาะของปีปัจจุบันได้มั้ยครับ โดยอ้างอิงจาก colume a ซึ่งเป็นวันที่อยู่แล้ว
Code: Select all
Sub SearchContact()
Dim s As String
s = LCase(Range("b1").Value)
Workbooks.Open Range("B3").Value & ".xlsx"
Dim r As Range, v As String
With Sheets("production plan ")
.Range("a3").CurrentRegion.EntireRow.Hidden = False
For Each r In .Range("a8", .Range("a" & .Rows.Count).End(xlUp))
v = ""
v = v & r.Value
v = v & r.Offset(0, 1).Value
v = v & r.Offset(0, 2).Value
v = v & r.Offset(0, 3).Value
v = v & r.Offset(0, 4).Value
v = v & r.Offset(0, 5).Value
v = v & r.Offset(0, 6).Value
v = v & r.Offset(0, 7).Value
v = v & r.Offset(0, 8).Value
v = v & r.Offset(0, 5).Value
v = v & r.Offset(0, 6).Value
v = v & r.Offset(0, 7).Value
v = v & r.Offset(0, 8).Value
v = v & r.Offset(0, 9).Value
v = v & r.Offset(0, 10).Value
v = v & r.Offset(0, 11).Value
v = v & r.Offset(0, 12).Value
v = v & r.Offset(0, 13).Value
v = v & r.Offset(0, 14).Value
v = v & r.Offset(0, 15).Value
v = v & r.Offset(0, 16).Value
v = v & r.Offset(0, 17).Value
v = v & r.Offset(0, 18).Value
v = v & r.Offset(0, 19).Value
v = v & r.Offset(0, 20).Value
v = v & r.Offset(0, 21).Value
v = v & r.Offset(0, 22).Value
v = v & r.Offset(0, 23).Value
v = v & r.Offset(0, 24).Value
v = v & r.Offset(0, 25).Value
v = v & r.Offset(0, 26).Value
v = v & r.Offset(0, 27).Value
v = v & r.Offset(0, 28).Value
v = v & r.Offset(0, 29).Value
v = v & r.Offset(0, 30).Value
v = v & r.Offset(0, 31).Value
v = v & r.Offset(0, 32).Value
v = v & r.Offset(0, 33).Value
v = v & r.Offset(0, 34).Value
v = v & r.Offset(0, 35).Value
v = v & r.Offset(0, 36).Value
v = v & r.Offset(0, 37).Value
v = v & r.Offset(0, 38).Value
v = v & r.Offset(0, 39).Value
v = v & r.Offset(0, 40).Value
v = v & r.Offset(0, 41).Value
v = v & r.Offset(0, 42).Value
v = v & r.Offset(0, 43).Value
v = v & r.Offset(0, 44).Value
v = v & r.Offset(0, 45).Value
v = v & r.Offset(0, 46).Value
v = v & r.Offset(0, 47).Value
v = v & r.Offset(0, 48).Value
v = v & r.Offset(0, 49).Value
v = v & r.Offset(0, 50).Value
v = LCase(v)
If Not v Like "*" & s & "*" Then
r.EntireRow.Hidden = True
End If
Next r
Dim source As Range
Set source = Range("A8", .Range("A" & .Rows.Count).End(xlUp))
source.Copy
End With
Workbooks("ContactNo.xlsm").Activate
Range("A10").PasteSpecial xlPasteValues
Application.CutCopyMode = fasle
End Sub
รบกวนขอคำแนะนำด้วยครับ ขอบคุณครับ