Page 1 of 1
ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Thu May 25, 2023 12:07 pm
by March201711
เข่น copy ทั้งบรรทัดที่ 5:5 ไปต่อลงมาอีก 1 บรรทัด เป็นบรรทัดที่ 6 และเอาสูตรยกไปอีกบรรทัดถัดไป อยากให้โค้ดมีความยืดหยุ่นค่ะ
Code: Select all
Sub Updates()
'
' aaa Macro
'
'
Rows("5:5").Select
Selection.Copy
Rows("6:6").Select
ActiveSheet.Paste
Rows("5:5").Select
Range("C5").Activate
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B5").Select
Application.CutCopyMode = False
Range("J7").Select
Windows("data.xlsx").Activate
Range("C5:C8").Select
Selection.ClearContents
Range("C3").Select
ActiveCell.FormulaR1C1 = "4/23/2023"
Range("C4").Select
Windows("Keep.xlsm").Activate
Range("I4").Select
End Sub
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Thu May 25, 2023 4:51 pm
by snasui

Code สำหรับ Copy เซลล์ที่เลือกลงไปด้านล่าง 1 บรรทัดครับ
Code: Select all
Selection.Copy
Selection.Offset(1, 0).PasteSpecial xlPasteValues
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Thu May 25, 2023 5:08 pm
by March201711
แล้วexcel จะรุ้ได้อย่างไรคะว่า copy บรรทัดไหน ให้เลือกจากวันที่ที่ cell A1 ได้ไหมคะ
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Thu May 25, 2023 5:25 pm
by March201711
ปรับสูตรตามที่อาจารย์แนะนำแล้ว ก็ยังทำไม่ได้ค่ะ
แล้ว excel จะรุ้ได้อย่างไรคะว่า copy บรรทัดไหน ให้เลือกจากวันที่ที่ cell A1 ได้ไหมคะ ทำเพิ่มมาให้แล้วค่ะ ตามไฟล์แนบ
เข่น copy ทั้งบรรทัดที่ 5:5 ไปต่อลงมาอีก 1 บรรทัด เป็นบรรทัดที่ 6 และเอาสูตรยกไปอีกบรรทัดถัดไป คือ ยังอยากเอาสูตรใช้ต่อในวันต่อไปน่ะค่ะ
Code: Select all
Sub Updates()
'
' aaa Macro
'
'
Rows("5:5").Select
Selection.Copy
Selection.Offset(1, 0).PasteSpecial xlPasteValues
' Rows("6:6").Select
' ActiveSheet.Paste
Rows("5:5").Select
Range("C5").Activate
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("B5").Select
Application.CutCopyMode = False
Range("J7").Select
Windows("data.xlsx").Activate
Range("C5:C8").Select
Selection.ClearContents
Range("C3").Select
ActiveCell.FormulaR1C1 = "4/23/2023"
Range("C4").Select
Windows("Keep.xlsm").Activate
Range("I4").Select
End Sub
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Thu May 25, 2023 7:56 pm
by logic
บรรทัดที่ 5 ไม่มีสูตร พอคัดลอกไปบรรทัดที่ 6 กลับมีสูตร ไปเอาสูตรมาจากไหนครับ
ที่บอกว่าใช้ A1 เป็นเงื่อนไข ก็ไม่เห็นมีบรรทัดไหนตรงกับค่าใน A1

Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Thu May 25, 2023 8:31 pm
by March201711
ที่ให้เลือกตรงกับ a1 เพราะให้บรรทัดหาค่าตรงกับa5 เพื่อให้เลือกว่าเป็นแถวที่5 ค่ะ
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Fri May 26, 2023 6:38 am
by snasui

จากภาพ A1 ไม่มีอยู่ในข้อมูลด้านล่างครับ
กรุณาเขียนเงื่อนไขมาอีกรอบ อธิบายวิธีคิดในการทำงานนี้มาให้เพื่อน ๆ ได้ทราบด้วยจะได้เข้าใจตรงกัน
เมื่อ Code มีอยู่ใน Module แล้ว ไม่จำเป็นต้องวาง Code ลงใน Worksheet อีก แค่เขียนอธิบายว่าจากข้อมูลใดต้องการให้เป็บแบบใดด้วยเงื่อนไขใด เท่านี้ก็เป็นการเพียงพอ สิ่งสำคัญคือต้องมี Code อยู่ใน Module เสมอครับ
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Fri May 26, 2023 12:33 pm
by March201711
คืออย่างนี้ค่ะ จุดประสงค์คือจะเตรียมข้อมูลที่จะ link ใน file data เพื่อรับรองข้อมูลที่มาใหม่ในวันถัดไป แต่ก็ต้องเก็บข้อมูลเป็นวันๆ ถัดลงมาก่อนน่ะค่ะ
เช่น วันนี้วันที่ 22/4/23 ข้อมูลจะเข้ามาที่ file data ที่ sheet main ที่ column C ตามวันที่ ข้อมูล high light สีเหลืองค่ะ แล้วเอามาวางที่ file Keep sheet Apr23 ซึ่งเป็นการ link ตามสูตรมาจาก file Data
พอจบวันที่ 22/4/23 แล้ว จะเตรียมไฟล์งานขึ้นวันถัดไป อยากให้ code vba copy สูตรที่ link มาจาก file data แต่ก็ยังคงเก็บข้อมูลวันที่ผ่านมาแล้วค่ะ ก็คือ copy แถวที่ 20 : 20 เพื่อจะเอาสูตรใช้ในวันถัดไปลงมาอีกบรรทัดนึง ไปวางที่ แถวที่ 21:21 แล้วทำการ paste value แถวที่ 20 : 20 เพื่อเป็นการเก็บข้อมูลน่ะค่ะ
จึงอยากให้ code vba มีความยืดหยุ่น ให้ code จับบรรทัดล่าสุดของข้อมูลมา copy แล้ว เอาสูตรที่ link จาก data มาวางในวันถัดไป โดยที่ paste value วันที่ copy เพื่อเป็นการเก็บข้อมูลเป็นวันๆๆ ต่อๆๆ กันมาค่ะ
จริงๆ ข้อมูลมีเยอะมากกเป็นวันเก่าๆ ทำให้ดูเพื่อเป็นการยกตัวอย่างน่ะค่ะ
Code: Select all
Sub Updates_new()
Cells.Find(What:="total", After:=ActiveCell, LookIn:=xlFormulas2, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False).Activate
Selection.End(xlUp).Select
Rows("20:20").Select
Selection.Copy
Rows("21:21").Select
ActiveSheet.Paste
Rows("20:20").Select
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("G23").Select
Application.CutCopyMode = False
End Sub
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Fri May 26, 2023 12:59 pm
by snasui

ตัวอย่างการปรับ Code ครับ
Code: Select all
With Range("a5").End(xlDown).Resize(, 6)
.Copy .Offset(1, 0)
.Value = .Value
End With
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Sat May 27, 2023 9:40 am
by March201711
ได้แล้วค่ะ ช่วยอธิบาย code vba ไดเไหมคะ เพื่อไปประยุกต์ใช้อย่างอื่นต่อค่ะ
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Sat May 27, 2023 2:46 pm
by snasui

แปลว่าจากเซลล์ A5 ให้ลงไปบรรทัดล่างสุด จากนั้นขยายไปทางขวา 6 คอลัมน์แล้ว Copy ไปบรรทัดล่าง จากนั้นกำหนดค่าให้บรรทัดเดิมเป็นค่าคงที่ครับ
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Sun May 28, 2023 9:57 am
by March201711
เข้าใจแล้วค่ะ แต่ติดตรง code นี้
คืออะไรค่ะ ถ้าลงมา 2 บรรทัด ต้องเป็น
หรือค่ะ แล้ว
0 คืออะไรคะ
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Sun May 28, 2023 11:43 am
by snasui

เลขตัวแรกใน Offset คือแนวบรรทัด เลขตัวที่สองคือแนวคอลัมน์
ถ้าเลขตัวแรกเป็นบวกหมายถึงไปยังบรรทัดล่าง ถ้าเป็นลบก็ไปในแนวทางกลับกัน
ถ้าเลขตัวที่สองเป็นบวกหมายถึงไปยังคอลัมน์ขวา ถ้าเป็นลบก็ไปในแนวทางกลับกัน
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Sun May 28, 2023 10:00 pm
by March201711
ค่ะ สงสัยวว่าทำไม อาจารย์ไม่มีกำหนดตัวแปรเลยหรอคะ ที่ผ่านๆ มาจะมีการกำหนดตัวแปรก่อนทุกครั้งแค่ทำไมครั้งนี้ไม่มีเลยคะ
Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ
Posted: Mon May 29, 2023 7:18 am
by snasui

กำหนดตัวแปรหรือไม่อยู่มีปัจจัยพิจารณาหลายประการ เช่น
- ต้องเก็บค่าเอาไปใช้ในภายหลังหรือไม่ ไม่ว่าจะ Procedure ที่เขียน Code หรือต้องส่งไปคำนวณต่อใน Function หรือ Procedure หรือ Project อื่น
- พื้นที่ที่ต้องจัดการมีการผันแปรตามจำนวนข้อมูลหรือไม่ กรณีนี้คือเป็นพื้นที่เท่าเดิม คือ 1 บรรทัดและ 6 คอลัมน์
การเขียน VBA จำเป็นต้องศึกษาและใช้เวลามาก ที่ผ่าน ๆ มาคุณ March201711 ทำมาแค่การบันทึก Macro ซึ่งจะพบได้ด้วยตัวเองว่า ยังไม่สามารถเข้าใจในเรื่องเหล่านี้เพิ่มขึ้นได้ เพราะการบันทึก Macro มีข้อจำกัด ไม่สามารถ Loop ไม่สามารถสร้างเงื่อนไขในการตัดสินใจได้ หรือหากได้รับคำตอบที่เป็นการเขียน VBA ก็จะไม่สามารถเข้าใจได้แม้เป็น Statement ง่าย ๆ ดังนั้นควรศึกษาเพิ่มจากคู่มือหรือตำรา หรือคลิปต่าง ๆ จะช่วยให้เข้าใจสิ่งเหล่านี้ได้มากขึ้นครับ