Page 1 of 1

เลือกลำดับแถวโดยอ้างอิงข้อมูลจากไฟล์อื่น

Posted: Sun Nov 06, 2016 1:02 am
by apinomon
ผมมีไฟล์ตัวอย่าง 2 ไฟล์ คือ Find-Row.xlsx และ Refer.xlsm
สูตรที่ใช้หาลำดับแถวของไฟล์Find-Rowโดยอ้างจากA2และB2ของไฟล์Refer.xlsmคือ
SUMPRODUCT(MATCH([Refer.xlsm]Sheet1!$A$2&[Refer.xlsm]Sheet1!$B$2,A:A&B:B,0))
ผลเท่ากับแถวที่2

แต่ที่ต้องการคือ หลังจากคลิกปุ่ม Botton1 ที่บันทึก macroไว้ แล้วให้เลือกแถวของไฟล์ Find-Row โดยอ้างจาก A2 และ B2 ของไฟล์ Refer.xlsm

รบกวนช่วยแก้ไขcodeให้หน่อยครับ

Code: Select all

Windows("Find-Row.xlsx").Activate
    Rows(SUMPRODUCT(MATCH([Refer.xlsm]Sheet1!$A$2&[Refer.xlsm]Sheet1!$B$2,A:A&B:B,0))).Select
ขอบคุณครับ

Re: เลือกลำดับแถวโดยอ้างอิงข้อมูลจากไฟล์อื่น

Posted: Sun Nov 06, 2016 7:24 am
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Windows("Find-Row.xlsx").Activate
Sheets("row").Activate
j = 1
Do While Cells(j, 1) <> ""
    If Cells(j, 1).Value = Workbooks("Refer.xlsm") _
        .Sheets("Sheet1").Range("a2").Value _
        And Cells(j, 2).Value = Workbooks("Refer.xlsm") _
            .Sheets("Sheet1").Range("b2").Value Then
        Exit Do
    End If
    j = j + 1
Loop
Cells(j, 1).Select

Re: เลือกลำดับแถวโดยอ้างอิงข้อมูลจากไฟล์อื่น

Posted: Sun Nov 06, 2016 10:41 am
by apinomon
ขอบคุณมากครับ
ผมลองปรับcode โดยเพิ่ม

Code: Select all

ActiveCell.Rows("1:1").EntireRow.Select
ต่อจาก

Code: Select all

Cells(j, 1).Select
แล้วใช้ได้ตรงความต้องการเลยครับ

ขอถามเพิ่มเติมครับ
ตอนแรกคิดว่าอาจารย์จะใช้เป็นฟังก์ชั่น Match แบบ VBA เลยอยากทราบถ้าฟังก์ชั่น Match code จะยาวและเข้าใจอยากกว่านี้รึเปล่าครับ

ขอบคุณครับ

Re: เลือกลำดับแถวโดยอ้างอิงข้อมูลจากไฟล์อื่น

Posted: Sun Nov 06, 2016 11:02 am
by snasui
:D หากจะเลือกทั้งบรรทัด ปรับ Code เป็น Cells(j, 1).EntireRow.Select ครับ

การ Match ใน VBA จะนำมาเปรียบเทียบกับการ Match ใน Excel ตามลักษณะที่เขียนมาถามนั้นไม่ได้ครับ หากเป็นหลายเงื่อนไข ต้องใช้การ Loop ตัวอย่างหนึ่งของการ Loop ก็ตามที่ผมตอบไปด้านบน หรือหากจะใช้ Match จริง ๆ ก็ต้องหาทางสร้างตัวแปรมารับแล้วค่อยใช้ WorksheetFunction.Match... เช่นนี้เป็นต้นครับ

Re: เลือกลำดับแถวโดยอ้างอิงข้อมูลจากไฟล์อื่น

Posted: Sun Nov 06, 2016 1:25 pm
by apinomon
ขอบคุณมากครับ สำหรับคำชี้แจงเรื่องMatchในVBA
และผมลองปรับcodeตามแล้วใช้ได้เลยครับโดยเปลี่ยนจาก

Code: Select all

Cells(j, 1).Select
เป็น

Code: Select all

Cells(j, 1).EntireRow.Select
เป็นการเลือกทั้งบรรทัดเลย โดยไม่ต้องมี

Code: Select all

ActiveCell.Rows("1:1").EntireRow.Select
เลยครับ

ขอบคุณครับ