อาจารย์ครับ ผมขอถามอีกคำถามนึงนะครับ จากโค้ดนี้ ถ้าผมต้องการให้กอบปี้เฉพาะคอลัมภ์ acdghikpr เท่านั้น จากโค้ดนี้ ต้องปรับเป็นแบบไหนครับ Sub consolidate() Dim i As Long, mySourceWb As Workbook, mySourceLastRow As Long For i = 4 To 10 Set mySourceWb = Workbooks.Open(sh_Consolidate.Range("AB" & i).Value) mySourceLastRow = mySourceWb.Sheets(1).Range("A" & Rows.Count).End(xlUp).Row mySourceWb.Sheets(1).Range("A4:Z" & mySourceLastRow).Copy sh_Consolidate.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll Application.CutCopyMode = False mySourceWb.Close Next i MsgBox "Done" End Sub 🙏😊😁
ดีมากเลยครับ สอนเข้าใจง่าย ลดเวลาทำงานได้เยอะเลยครับ ขอบคุณมากเลยครับ
ขอบคุณมากครับ สำหรับ comment ดี ๆ เป็นกำลังใจที่สุดยอด ส่งท้ายปี2023 เลยครับ 😀
ขอบคุณครับอาจารย์
ถ้าอยากให้ pastespecial เป็นคำสั่งก้อปปี้ข้อมูลที่มีเท่านั้นไม่เอาช่องที่ว่างมา ทำได้ไหมคะ เพราะตอนนี้ สมมติว่าไฟล์นึงมี500บรรทัดเหมือนกันหมดทุกไฟล์ แต่ว่าแต่ละไฟล์จะมีข้อมุลที่ช่องต่างกัน บางไฟล์อยุ่บรรทัด 100 บางไฟล์บรรทัด 300 งี้ค่ะ บรรทัดอื่นๆจะว่าง พอใช้คำสั่งตามตัวอย่างกลายเป็นว่ามันเอาทั้ง 500บรรทัดมาต่อกันเรื่อยๆซึ่งมันยาวมากๆเลยค่ะ อยากได้แค่ว่า ก้อปเอามาแต่บรรทัดที่มีข้อมูลแล้วเอามาต่อๆบรรทัดไปเรื่อยๆค่ะ พอเข้าใจที่จะสื่อไหมคะ รบกวนด้วยค่ะ
5555
ถ้างานเป็น template แล้วให้เติมข้อมูลเข้ามาเรื่อย ๆ ใน 500 บรรทัดเดิม ๆ แบบนี้ เราไม่ต้องหาบรรทัดสุดท้ายเพื่อเอาข้อมูลไปต่อเลยครับ เราสามารถสั่ง paste special ลงจุดเดิมได้เลย แต่ให้กำหนด parameter การ skipBlank ให้เป็น true ก็จะได้ข้อมูลอย่างที่ต้องการครับ
ขอบคุณค่ะ
คุณ ปุ้มเริ่มใช้งาน VBA แล้ว เยี่ยมเลยครับ ลุยเลย ได้ประโยชน์แน่่นอน ครับ
ถ้าอยากดึงเเค่คอลัมเดียวจากร้อยๆไฟล์มารวมในชีทเดียว ใช้เบสโค้ดนี้ได้มั้ยคะ เปลี่ยนจากrowเป็นcolอะค่ะ
ใช่ครับ สามารถใช้โครงสร้างการ loop แบบนี้ แต่กำหนดตำแหน่งที่จะก้อปปี้ และตำแหน่งที่จะวางใหม่ก็จะได้งานเลยครับ 👍😀
สอบถามครับ ถ้า file ของผมมี Sheet หลายชื่อ แต่ต้องการกำหนด เพียงชีทเดียวที่มีชื่อเฉพาะ ต้องทำเขียน Code ยังไงครับ
เราจะเอา if statement ตรวจสอบชื่อชีทก่อนดึงข้อมูลครับ ถ้าชื่อชีทตรงกับชีทที่เราต้องการจึงจะ copy ไป ถ้าไม่ตรงก็ข้ามไป ครับ
ขอบคุณความรู้ดีๆที่อาจารย์มอบให้มากค่ะ❤
หนูขอสอบถามเพิ่มค่ะ
วิธีนี้ใช้ได้กับ
บางไฟลอาจมีคอลัมน์น้อย-มากกว่า ใช้สูตรนี้ได้ไหมคะ
ตอบว่าทั้งได้ และไม่ได้ครับ
ถ้าทำเพียงตามคลิ้ปจะได้ข้อมูลที่ไม่ถูกต้อง
ถ้าอยากให้ถูกต้องต้องก็ต้องเขียนโค้ดเพิ่มเพื่อ match หาคอลัมน์ แล้วจึงเอาไปประกอบเป็น range เพื่อ copy ครับ
ถ้าต้องการรวมข้อมูลหลาย Sheet ใน 1 ไฟล์ ต้องแก้ไขยังไงบ้างนะคะ
ทำไมของผม พอเสร็จ มันรันแบบขึ้น Done ทีละไฟล์ที่ดึงมาเหรอครับ
ขอดูโค้ดที่เขียนหน่อยครับ
ถ้าให้เดา ผมว่าน่าจะวาง msgbox ผิดตำแหน่งครับ
สวัสดีค่ะ รบกวนสอบถามเพิ่มเติมค่ะ ถ้าในไฟล์ที่เราดึงมา มีหลายชีท แต่จะเลือกแค่ชีทเดียวในไฟล์นั้นมา ทำอย่างไรคะ
เราสามารถกำหนดชีทที่จะเอาข้อมูลไปวางที่ชีทนั้น โดยการกำหนดชื่อชีทตามด้วย จุด เช่น
Sheets("report").range("A7").PasteSpecial xlPasteValues
เป็นต้นครับ
อาจารย์ครับ ผม copy path ของ ชีท 1-5 แต่เวลารัน ชีทที่ 3 ไม่มาครับ ผมทำอะไรผิดครับ
55555
ถามมาแบบนี้อาจารย์ตอบไม่ได้เลยครับ ต้องเห็นสิ่งที่เขียน ครับ ✌️😀
@@Excelchannel ผมเขียนแบบที่อาจารย์สอนเลยครับ แต่ผมเพิ่งนึกได้ว่า ผมซ่อนคอลัมภ์ทั้งชีทของเดือน 3 ไว้ไม่รู้ว่าเกี่ยวกันไหม ตอนนี้ไม่ได้อยู่หน้างานเลยยังลองไม่ได้ครับ ❤😊
อาจารย์ครับ ผมขอถามอีกคำถามนึงนะครับ จากโค้ดนี้ ถ้าผมต้องการให้กอบปี้เฉพาะคอลัมภ์ acdghikpr เท่านั้น จากโค้ดนี้ ต้องปรับเป็นแบบไหนครับ
Sub consolidate()
Dim i As Long, mySourceWb As Workbook, mySourceLastRow
As Long
For i = 4 To 10
Set mySourceWb =
Workbooks.Open(sh_Consolidate.Range("AB" & i).Value)
mySourceLastRow = mySourceWb.Sheets(1).Range("A" &
Rows.Count).End(xlUp).Row
mySourceWb.Sheets(1).Range("A4:Z" &
mySourceLastRow).Copy
sh_Consolidate.Range("A" &
Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial xlPasteAll
Application.CutCopyMode = False
mySourceWb.Close
Next i
MsgBox "Done"
End Sub
🙏😊😁
@@oilzombie88888
ลองแล้วได้ผลอย่างไร บอกมาหน่อยนะครับ