Page 1 of 1

ใช้ Key ค้นหาค่า มาเติมจาก Sheet 1 มา Sheet2

Posted: Tue Jan 31, 2012 5:38 pm
by prawitj
พอดีผมมี 2 Sheet
1. ชีท PO
2. ชีท FI ซึ่งจะกรอกรายละเอียดของ Finance โดยผมจะดึงมาเป็น Pivot
ทั้ง2 Sheet จะใช้เลข Index เดียวกันแต่ทำงานคนละหน้าที่กัน

ตอนแรกผมใช้ vlookup ในการดึงค่าจาก FI มาหยอดใน PO โดยใช้ PO Index แต่ มันทำให้การเปิด,ปิด, Filter etc; ช้าไปหมดเลย ทำให้ user หงุดหงิด ผมเลยจะลองใช้ VBA ดู โดยการเขียนดังตัวอย่าง ซึ่งก็ดึงค่ามาได้ ถูกต้อง แต่ ปัญหาคือ
เมื่อใช้กับ File จริง ที่มีข้อมูล ประมาณ 2,000 กว่าแถว ผมกดปุ่ม Update Finance ปรากฏว่า เครื่องดึงค่ามาหยอดช้ามาก จับเวลาได้ประมาณ 30 นาที่ นี่ขนาดผมทดลองหยอดแค่ Column เดียวนะครับ ถ้าผมทดลองทุก column ของ Finance ให้ครบ ผมว่าจะยิ่งช้าไปกันใหญ่

เลยอยากจะปรึกษาอาจารย์หน่อยครับ ว่าพอจะมี เทคนิคเขียน Code วน Loop ที่มัน Effective กว่านี้ไม๊ครับ

ปล.ช่วงนี้ผมคล่องขึ้นเยอะเลยครับ สำหรับ VBA ต้องขอขอบคุณอาจารย์จริงๆที่ให้คำปรึกษามาโดยตลอด

Re: ใช้ Key ค้นหาค่า มาเติมจาก Sheet 1 มา Sheet2

Posted: Tue Jan 31, 2012 7:52 pm
by snasui
:D นอกจาก Vlookup แล้วสามารถใช้ Index กับ Match มาช่วยได้ครับ ซึ่งทำงานเร็วกว่า Vlookup

กรณีต้องการใช้ Code ลองปรับเป็นตามด้านล่างครับ

Code: Select all

Private Sub btnFI_Click()
    Dim rPO As Range 'All range in PO
    Dim rs As Range 'Each cell in PO
    Dim rFI As Range ' All Rang in po from fi
    Dim lng As Long
    With Sheets("FI")
        Set rFI = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    With Sheets("PO")
        Set rPO = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    For Each rs In rPO
        If Not IsError(Application.Match(rs, rFI, 0)) Then
            lng = Application.Match(rs, rFI, 0)
            rs.Offset(0, 1) = rFI(lng).Offset(0, 1)
        End If
    Next rs
End Sub

Re: ใช้ Key ค้นหาค่า มาเติมจาก Sheet 1 มา Sheet2

Posted: Wed Feb 01, 2012 12:01 pm
by prawitj
ลองใช้ VBA แบบที่อาจารย์แนะนำแล้วก็ยังไม่ Work อยู่ดีครับ ช้าเหมือนกัน
เลยลองเขียน Index กับ match ดุ แต่มัน Error ครับ รบกวนขอคำปรึกษาอาจารย์อีกครั้งครับ

Re: ใช้ Key ค้นหาค่า มาเติมจาก Sheet 1 มา Sheet2

Posted: Wed Feb 01, 2012 12:11 pm
by snasui
:D ลองตามนี้ครับ

ที่ชีท PO เซลล์ B2 คีย์

=INDEX(FI!$B$2:$B$18,MATCH(A2,FI!A$2:A$18,0))

Enter > Copy ลงด้านล่าง

Re: ใช้ Key ค้นหาค่า มาเติมจาก Sheet 1 มา Sheet2

Posted: Wed Feb 01, 2012 1:51 pm
by prawitj
ได้แล้วครับ ขอบคุณครับ ว่าแต่ เปรียบเทียบ Vlookup กับ index, Match นี่ความเร็วต่างกันเยอะไม๊ครับ

Re: ใช้ Key ค้นหาค่า มาเติมจาก Sheet 1 มา Sheet2

Posted: Wed Feb 01, 2012 2:31 pm
by snasui
:D ความเร็วจะอยู่ที่ขนาดของช่วงข้อมูลที่นำมาใช้ครับ

สำหรับ Vlookup แล้วขนาดช่วงข้อมูลคือทั้งทางกว้างและทางลึกมีผลต่อความเร็วครับ

ยกตัวอย่างเช่นผลกระทบจากขนาดความกว้างข้อมูล

=Vlookup(A2,B2:C10000,2,0) กับ

=Vlookup(A2,B2:Z10000,10,0)

มีความเร็วต่างกันครับ

ส่วน Index กับ Macth ตามกรณีนี้ขนาดข้อมูลทางลึกจะมีผลกับความเร็ว หากจำนวนบรรทัดมีจำนวนมากก็จะทำงานได้ช้าลง แต่ก็คงทำงานเร็วกว่า Vlookup ครับ