Page 1 of 1

VB สำหรับแทนที่ index match

Posted: Thu Dec 13, 2012 2:58 pm
by godman
สวัสดีครับ
จาการที่ผมใช้สูตรมาบ่อย พบปัญหาว่าการทำงานกับข้อมูลมากๆ เป็นพันๆแถวทำให้ไฟล์มีขนาดใหญ่ ผมจึงหันมาหัดทำ VB
โดยปัญหาที่พบวันนี้คือ ผมลองใช้ index match ด้วย VB ครับ
ผมต้องการให้คำตอบคือแสดงเป็น week อยู่ที่คอลัมพ์ L ของชี้ตชื่อ connextion แต่ผมทำแล้ว error ขอความกรุณาท่านผู้รู้ช่วยตรวจสอบว่าผมควรจะแก้ไข code อย่างไร

Code: Select all

Sub IndexMatch()
    Dim lastrow
    lastrow = Cells(Rows.Count, 1).End(xlUp).Row
    With Worksheets("Connextion").Range("L3:L" & lastrow)
        .Formula = "=IF(ISNA(MATCH(A2,Connextion!$A$3:$A$65536,)),"""",INDEX(Option!$C$3:$C$65536,MATCH(A2,Connextion!$A$3:$A$65536,),2))"
        .Value = .Value
    End With
End Sub

Re: VB สำหรับแทนที่ index match

Posted: Thu Dec 13, 2012 5:00 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Public Sub IndexMatch2()
    Dim lastrow
    lastrow = Cells(Rows.Count, 1).End(xlUp).Row
    With Worksheets("Connextion").Range("c2:c" & lastrow).Offset(0, 9)
        .Formula = "=IF(ISNA(MATCH(A2,Daily!$A$2:$A$65536,)),"""",INDEX(Daily!$A$2:$P$65536,MATCH(A2,Daily!$A$2:$A$65536,),2))"
        .Value = .Value
    End With
End Sub
Code นี้มีค่าเที่ยบเท่ากับคีย์สูตรลงไปเองตรง ๆ เพียงแต่เปลี่ยนจากคีย์เองไปเป็นผ่าน VBA เท่านั้น เพื่อต้องการให้ Worksheet คำนวณเร็วจึงสังเกตเห็นว่าต้องเพิ่ม Code สำหรับ Copy สูตรให้กลายเป็น Value ด้วยครับ

Re: VB สำหรับแทนที่ index match

Posted: Thu Dec 13, 2012 5:03 pm
by godman
ขอบพระคุณครับ ใช้ได้ดีเลย ผมสามารถนำไปประยุกต์ในงานได้มากมายจริงๆ