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
:D 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 :flw:

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
:D จากภาพ 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
:D ตัวอย่างการปรับ 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
:D แปลว่าจากเซลล์ A5 ให้ลงไปบรรทัดล่างสุด จากนั้นขยายไปทางขวา 6 คอลัมน์แล้ว Copy ไปบรรทัดล่าง จากนั้นกำหนดค่าให้บรรทัดเดิมเป็นค่าคงที่ครับ

Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ

Posted: Sun May 28, 2023 9:57 am
by March201711
เข้าใจแล้วค่ะ แต่ติดตรง code นี้

Code: Select all

  Offset(1, 0) 
คืออะไรค่ะ ถ้าลงมา 2 บรรทัด ต้องเป็น

Code: Select all

 Offset(2, 0) 
หรือค่ะ แล้ว

Code: Select all

 Offset(1, 0) 
0 คืออะไรคะ

Re: ต้องการ copy ข้อมูลมาต่อๆ กันไปเรื่อยๆ

Posted: Sun May 28, 2023 11:43 am
by snasui
:D เลขตัวแรกใน 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
:D กำหนดตัวแปรหรือไม่อยู่มีปัจจัยพิจารณาหลายประการ เช่น
  1. ต้องเก็บค่าเอาไปใช้ในภายหลังหรือไม่ ไม่ว่าจะ Procedure ที่เขียน Code หรือต้องส่งไปคำนวณต่อใน Function หรือ Procedure หรือ Project อื่น
  2. พื้นที่ที่ต้องจัดการมีการผันแปรตามจำนวนข้อมูลหรือไม่ กรณีนี้คือเป็นพื้นที่เท่าเดิม คือ 1 บรรทัดและ 6 คอลัมน์
การเขียน VBA จำเป็นต้องศึกษาและใช้เวลามาก ที่ผ่าน ๆ มาคุณ March201711 ทำมาแค่การบันทึก Macro ซึ่งจะพบได้ด้วยตัวเองว่า ยังไม่สามารถเข้าใจในเรื่องเหล่านี้เพิ่มขึ้นได้ เพราะการบันทึก Macro มีข้อจำกัด ไม่สามารถ Loop ไม่สามารถสร้างเงื่อนไขในการตัดสินใจได้ หรือหากได้รับคำตอบที่เป็นการเขียน VBA ก็จะไม่สามารถเข้าใจได้แม้เป็น Statement ง่าย ๆ ดังนั้นควรศึกษาเพิ่มจากคู่มือหรือตำรา หรือคลิปต่าง ๆ จะช่วยให้เข้าใจสิ่งเหล่านี้ได้มากขึ้นครับ