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] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
mabolosoda
Member
Posts: 11 Joined: Tue Aug 27, 2013 11:07 am
#1
Post
by mabolosoda » Mon Sep 25, 2017 1:51 pm
สวัสดีครับ ผมต้องการวางข้อมูลต่อกันภายในแถว ตั้งแต่เดือน 1/17 - 12/18 แต่พอรันมาโครข้อมูลไม่เริ่มที่แถวใหม่ แต่กลับวางทับที่เดิมตลอด แบบนี้ผมต้องแก้ Code ในส่วนไหนบ้างครับ ขอบคุณมากครับ
ไฟล์แนบ
Macro Excel - TEST.xlsm
ภาพนี้เป็นตัวอย่างผลที่อยากได้ครับ
Result.JPG
Code: Select all
Sub CopyToDB()
Sheets("sheet1").Select
RowEnd = Selection.End(xlDown).Row
RowEnd = RowEnd + 1
Sheets("Sheet1").Select
Range("L3").Select
ColEnd = Selection.End(xlToRight).Column
Sheets("database").Select
Sheets("database").Range("A2").Select
RowEndDB = RowEnd
RowEndDB = RowEndDB + 1
For i = 12 To ColEnd
Sheets("sheet1").Select
Columns("K:K").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("L2").Select
Selection.Copy
Range("K3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("K3:K7754"), Type:=xlFillCopy
'Range("K:K7754").Select
'
Sheets("sheet1").Select
Range("A3:L3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Range("A" & RowEndDB).Select
Worksheets("Database").Paste
Sheets("Sheet1").Select
Columns("K:L").Select
Selection.Delete Shift:=xlToLeft
Next i
End Sub
You do not have the required permissions to view the files attached to this post.
DhitiBank
Gold
Posts: 1676 Joined: Mon Oct 15, 2012 12:07 am
#2
Post
by DhitiBank » Mon Sep 25, 2017 5:04 pm
ลองแบบนี้ครับ
Code: Select all
Sub CopyToDB()
Sheets("sheet1").Select
RowEnd = Range("a" & Rows.Count).End(xlUp).Row
Set rDat1 = Range("a3:j" & RowEnd)
Set rdateachmonth = Range("k3:k" & RowEnd)
Set rAllMonth = Range("k2", Range("k2").End(xlToRight))
Sheets("database").Select
i = 0
For Each r In rAllMonth
rowend2 = Range("a" & Rows.Count).End(xlUp).Row + 1
rDat1.Copy Range("a" & rowend2)
r.Copy Range("a" & rowend2).End(xlToRight).Offset(, 1) _
.Resize(rdateachmonth.Rows.Count, 1)
rdateachmonth.Offset(, i).Copy Range("a" & rowend2).End(xlToRight) _
.Offset(, 1)
i = i + 1
Next r
End Sub
mabolosoda
Member
Posts: 11 Joined: Tue Aug 27, 2013 11:07 am
#3
Post
by mabolosoda » Mon Sep 25, 2017 8:05 pm
ขอบคุณ คุณDhitiBank มากครับ เป็นโค้ดที่เขียนใหม่สั้นดีจริงๆครับ ผมยังเป็นมือใหม่มากๆ ศึกษาได้ยังไม่ถึงเดือน บางส่วนบางบรรทัดอาจจะยังไม่ค่อยเข้าใจ โค้ดจะสั้นหรือยาวคงอยู่ที่คอนเซปที่เราคิดจะทำว่าเราจะทำอะไรจากข้อมูลที่มีและอยากได้ข้อมูลเป็นแบบไหนซึ่งวิธีคิดมีมากมาย ในช่วงที่รอคำตอบ ผมเลยพยายามทำจากโค้ดเก่าให้ได้ซึ่งตอนนี้สามารถ รัน จนผ่านแล้ว ขอขอบคุณพื้นที่ ที่ช่วยให้ผมหาคำตอบและตัวอย่าง และความรู้จากพี่ๆทุกคนที่ให้คำแนะนำมากครับ
อันนี้เป็นโค้ดที่ผมแก้เสร็จและรันจนผ่านแล้ว อาจจะยาวหน่อยแต่ขอแชร์ไว้ เผื่อมีท่านอื่นมีปัญหาแนวเดียวกับผมครับ
Code: Select all
Sub CopyToDB()
Sheets("sheet1").Select
Sheets("sheet1").Range("A2").Select
RowEnd = Selection.End(xlDown).Row
'RowEnd = RowEnd
'Sheets("Sheet1").Select
Range("L2").Select
ColEnd = Selection.End(xlToRight).Column
Sheets("database").Select
Rows("2:100000").Select
Selection.Delete Shift:=xlUp
RowEndDB = 2
For i = 12 To ColEnd
Sheets("sheet1").Select
Columns("K:K").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("L2").Select
Selection.Copy
Range("K3").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.AutoFill Destination:=Range("K3:K" & RowEnd), Type:=xlFillCopy
'Range("K3:K7754").Select
Sheets("sheet1").Select
Range("A3:L3").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Database").Select
Range("A" & RowEndDB).Select
Worksheets("Database").Paste
Sheets("Database").Range("A1").Select
RowEndDB = Selection.End(xlDown).Row
RowEndDB = RowEndDB + 1
Sheets("Sheet1").Select
Columns("K:L").Select
Selection.Delete Shift:=xlToLeft
Next i
End Sub