snasui.com ยินดีต้อนรับ
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ ระบุ Version ของ Excel
ฟอรัมถาม-ตอบปัญหาการใช้งานสูตรและฟังก์ชัน Excel
Forum rules
ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
PPtip
Member
Posts: 5 Joined: Tue Aug 25, 2015 2:49 pm
#1
Post
by PPtip » Tue Sep 08, 2015 5:46 pm
เนื่องจาก ผมต้องทำการ Copy ข้อมูล จากหลาย Range ในหนึ่ง Sheet และเป็นการ Copy จากหลาย Sheet ในไฟล์ เดียวกัน
ผมขออธิบายเป็น Code อย่างง่ายที่ผมเขียนน่ะครับ
Code: Select all
Sub IT()
Dim x As Workbook
Dim y As Workbook
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'IT
Set x = Workbooks.Open("L:\g\Budget\Budget 2016 V.1- IT.xlsm")
Set y = Workbooks("Budget 2016 V.1- MASTER.xlsm")
'Sheet1
x.Sheets("1.CB-BKE").Range("N14:Y14").Copy
y.Sheets("1.CB-BKE").Range("N14:Y14").PasteSpecial
x.Sheets("1.CB-BKE").Range("N17:Y17").Copy
y.Sheets("1.CB-BKE").Range("N17:Y17").PasteSpecial
x.Sheets("1.CB-BKE").Range("N20:Y20").Copy
y.Sheets("1.CB-BKE").Range("N20:Y20").PasteSpecial
'Sheet2
x.Sheets("3.CB-BSN").Range("N14:Y14").Copy
y.Sheets("3.CB-BSN").Range("N14:Y14").PasteSpecial
x.Sheets("3.CB-BSN").Range("N17:Y17").Copy
y.Sheets("3.CB-BSN").Range("N17:Y17").PasteSpecial
x.Sheets("3.CB-BSN").Range("N20:Y20").Copy
y.Sheets("3.CB-BSN").Range("N20:Y20").PasteSpecial
x.Close
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
ไม่ทราบว่าผมสามารถใช้สูตรไหนได้บ้างครับ เพราะ
1.เอกสาร Y จะต้อง copy ประมาณ 40 Sheet ครับ
2.Range ที่ต้อง Copy ต่อ 1 Sheet มีประมาณ 60 Range ครับ ทำให้ไม่สามารถรันได้ครั้งเดียว เนืองจากสูตรมีความยาวเกินไปครับ
ขอบคุณครับ
bank9597
Guru
Posts: 3868 Joined: Wed Aug 17, 2011 11:49 am
#2
Post
by bank9597 » Tue Sep 08, 2015 7:34 pm
แนบไฟล์ตัวอย่างด้วยครับ พร้อมทำตัวอย่างคำตอบที่ต้องการมาดูด้วยครับ
Forum Rules
อย่าใช้ภาษาแชทในการตอบ-ถาม
ตั้งชื่อกระทู้ให้สื่อถึงปัญหาและไม่เจาะจงตัวผู้ตอบ
ให้อธิบายปัญหาและระบุคำตอบที่ต้องการมาในฟอรัม
ควรแนบไฟล์ตัวอย่างมาที่ฟอรั่ม
หากใช้ VBA ให้ลองเขียนมาเองก่อนเสมอ
แจ้งผลการใช้งานทุกครั้งเมื่อได้รับคำตอบ
PPtip
Member
Posts: 5 Joined: Tue Aug 25, 2015 2:49 pm
#3
Post
by PPtip » Wed Sep 09, 2015 6:15 pm
bank9597 wrote: แนบไฟล์ตัวอย่างด้วยครับ พร้อมทำตัวอย่างคำตอบที่ต้องการมาดูด้วยครับ
ผมได้แนบไฟล์ตัวอย่างมาให้แล้วครับ ไฟล์ที่ต้องการจริง จะมีข้อมูลครบทุกช่องตามรหัส OP BD FA ตาม Sheet ย่อยที่ไม่ใช่ Sheet Consol ครับ
บ้างไฟล์ Range ที่ดึงมา ก็ไม่ได้เรียงติดกันครับ จะมีข้ามไปมาครับ ตัวเลขที่ผมใส่เป็นตัวแรกสมมุติ ความจริงจะไม่เท่ากันครับ
ถ้าผมอธิบายไม่เข้าใจยังไง รบกวนชี้แนะด้วยครับ
ขอบคุณสำหรับความช่วยเหลือครับ
You do not have the required permissions to view the files attached to this post.
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#4
Post
by snasui » Wed Sep 09, 2015 7:16 pm
หากทำด้วยมือโดยไม่พึ่งโปรแกรม มีหลักการในเอาค่าจากต้นทางไปวางปลายทางอย่างไร ให้เขียนมาอย่างละเอียดครับ
การอธิบาย ให้เขียนบรรยาย จะได้ทราบว่าต้องการจะทำอะไร มีเงื่อนไขใด คำตอบที่ต้องการเป็นอย่างไร สามารถทำเป็นภาพ ใส่สี ตีเส้น ทำลูกศรโยงไปโยงมาตามสะดวก จะได้เข้าใจตรงกันครับ
PPtip
Member
Posts: 5 Joined: Tue Aug 25, 2015 2:49 pm
#5
Post
by PPtip » Fri Oct 02, 2015 2:49 pm
ต้องขอโทษที่หายไปนานครับ
จากโค้ดที่ผมเขียน
Code: Select all
'Sheet1
x.Sheets("1.CB-BKE").Range("N14:Y14").Copy
y.Sheets("1.CB-BKE").Range("N14:Y14").PasteSpecial
อธิบาย คือ ให้ทำการ Copy Sheet "1.CB-BKE" ที่ "Range14" จากไฟล์ X ที่เป็นไฟล์ต้นทาง --> และ Paste ลงในไฟล์ Y ที่ Sheet "1.CB-BKE" ที่ "Range14" ที่เป็นไฟล์ปลายทางครับ
ซึ่งผมต้อง Copy หลาย Range ใน 1 Sheet และมีทั้งหมดประมาณ 50 Sheet ทำให้ Excel ขึ้น Error : procedure too large ครับ อยากสอบถามว่ามีวิธีไหนที่ทำให้สูตรสั้นลงได้บ้าง หรือว่าต้อง split สูตรออกมาเป็น 2 ชุดครับ
ตำแหน่งการ Copy ของแต่ละ Sheet จะอยู่ใน Range เดียวกัน
Code: Select all
'Sheet1
x.Sheets("1.CB-BKE").Range("N14:Y14").Copy
y.Sheets("1.CB-BKE").Range("N14:Y14").PasteSpecial
x.Sheets("1.CB-BKE").Range("N17:Y17").Copy
y.Sheets("1.CB-BKE").Range("N17:Y17").PasteSpecial
'Sheet2
x.Sheets("2.CB-BSN").Range("N14:Y14").Copy
y.Sheets("2.CB-BSN").Range("N14:Y14").PasteSpecial
x.Sheets("2.CB-BSN").Range("N17:Y17").Copy
y.Sheets("2.CB-BSN").Range("N17:Y17").PasteSpecial
ขอบคุณสำหรับทุกๆคำแนะนำครับ
snasui
Site Admin
Posts: 31253 Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:
#6
Post
by snasui » Fri Oct 02, 2015 7:07 pm
ตัวอย่างการ Loop ตามลักษณะงานที่ถามมาครับ
Code: Select all
Sub test()
'Other variable declaration
Dim i As Integer
For i = 1 To x.Sheets.Count
x.Sheets(i).Range("N14:Y14").Copy
y.Sheets(i).Range("N14:Y14").PasteSpecial
x.Sheets(i).Range("N17:Y17").Copy
y.Sheets(i).Range("N17:Y17").PasteSpecial
Next i
End Sub