Page 1 of 1

การคัดลอกข้อมูลข้าม Sheet โดยนำตารางข้อมูลมาต่อกัน (VBA)

Posted: Thu Oct 27, 2016 11:32 am
by Kanok
ขอคำแนะนำเกี่ยวกับการคัดดลอกข้อมูลข้าม Sheet แล้วนำข้อมูลมาต่อกันค่ะ

- ต้องการใช้ข้อมูล ในคอลัมภ์ Q และ Rคอลัมภ์ A และ ZZ(ในSheet 2) ในขั้นตอนแรกนี้จึงใช้การบันทึก Macro เพื่อคัดลอกข้อมูลใน คอลัมภ์ Q และ R จาก Sheet 2 ไปวางไว้ที่ Sheet3 ก่อน
- จากนั้น ต้องการข้อมูลใน คอลัมภ์ A และ ZZ (ในSheet 2) ไปวางต่อท้าย ข้อมูลใน Sheet3
- ในส่วนของการวางข้อมูลต่อท้ายข้อมูลชุดแรก ได้ทำการกำหนด code เพื่อหา cell ที่ว่างถัดไป จึงได้กำหนดตัวแปรเป็น NextRow
- จากนั้นเขียนคำสั่งให้มีการวางข้อมูล ตรงจุดนี้ไม่สามารถรันโปรแกรมได้ ขอคำชี้แนะด้วยค่ะ

Copy Data Sheet2 to Sheet 3 _ Y161027.jpg
Copy Data Sheet2 to Sheet 3 _ Y161027.jpg (105.83 KiB) Viewed 364 times

Code: Select all

Sub copy1() 'Copytosheet 3
Dim NextRow As Integer


    Range("Q2:R2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.copy
    Sheets("Sheet3").Select
    Range("A2").Select
    ActiveSheet.Paste
    
    Worksheets("Sheet2").Select
    Range("Z2:AA2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.copy
    
    NextRow = Worksheets("Sheet3").Cells(Rows.Count, 1).End(xlUp).Row + 1   '# To find next row
    Cells(NextRow, 1).Select
    Selection.Paste
        
End Sub

Copy Data Sheet2 to Sheet3.xlsm
(141.77 KiB) Downloaded 45 times

Re: การคัดลอกข้อมูลข้าม Sheet โดยนำตารางข้อมูลมาต่อกัน (VBA)

Posted: Thu Oct 27, 2016 12:34 pm
by niwat2811
ลองปรับ Code แบบนี้ดูว่าใช้ได้ตามต้องการไหมครับ

Code: Select all

Sub test()
Dim lr As Long
With Sheets("Sheet2")
    lr = .Range("A" & Rows.Count).End(xlUp).Row
    .Range("Q2:R" & lr).copy Sheets("Sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
    .Range("Z2:AA" & lr).copy Sheets("Sheet3").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)
End With
End Sub

Re: การคัดลอกข้อมูลข้าม Sheet โดยนำตารางข้อมูลมาต่อกัน (VBA)

Posted: Thu Oct 27, 2016 2:47 pm
by Kanok
ขอบคุณ คุณ niwat2811 มากค่ะสำหรับ code สามารถนำไปใช้งานได้ดีมากๆค่ะ

-ขอถาเป็นควารู้เพิ่มเติมค่ะ โดยปกติแล้วเวลารันโปรแกรมบางอันของตัวเองที่ได้จากการบันทึก Macro หน้าจอ Excel ก็จะแสดงขั้นตอนอย่างรวดเร็วประมาณ 1-3 วินาที (หน้าจอ Excel วิ่งกลับไปกลับมา)ก่อนที่จะแสดงผลออกมา
- แต่สำหรับโค้ดของคุณ niwat2811 พอคลิกรันโปรแกรมก็ได้ผลลัพธ์ออกมาเลย โดยที่หน้าจอ Excel ไม่วิ่งกลับไปกลับมา

ในกรณีนี้การเขียนโปรแกรมขึ้นมาเองกับ การบันทึก Macro มีส่วนเกี่ยวข้องกับความเร็วในการรันโปรแกรมหรือไม่คะ

Re: การคัดลอกข้อมูลข้าม Sheet โดยนำตารางข้อมูลมาต่อกัน (VBA)

Posted: Thu Oct 27, 2016 7:10 pm
by snasui
:D กรณีการบันทึก Macro จะทำงานตามการคลิกเมาส์ หากเลือกเซลล์หรือคลุมเซลล์โปรแกรมก็จะทำตามนั้น แต่หากเขียนด้วย VBA เราสามารถที่จะเลือกให้ทำงานใด ๆ ได้โดยไม่ต้องเลือกเซลล์หรือคลิกเซลล์ อันนี้แค่ตัวอย่างครับ

หากจะสรุปอย่างง่าย ๆ การบันทึก Macro จะช้ากว่าการเขียนโปรแกรมด้วย VBA ครับ

Re: การคัดลอกข้อมูลข้าม Sheet โดยนำตารางข้อมูลมาต่อกัน (VBA)

Posted: Fri Oct 28, 2016 11:23 am
by Kanok
:thup: ขอบคุณมากค่ะ สำหรับคำแนะนำเพิ่มเติม