Page 1 of 1

รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Mon May 13, 2013 10:46 pm
by natthaporn
ดิฉันรบกวนสอบถามการเขียน code vba สำหรับการ copy ข้อมูลดังนี้คะ
ดิฉันต้องการ copy paste value ข้อมูลจาก
1. B5:B13 ไปไว้ที่ I5:T13
2. C5:C13 ไปไว้ที่ U5:AF13
3. E5:E13 ไปไว้ที่ AG5:AR13
4. G5:G13 ไปไว้ที่ AS5:BD13
โดยมีเงื่อนไขอยู่ที่ D2 คือ ถ้าที่ D2 = YTDJAN ให้
1. Copy ข้อมูลจาก B5:B13 ไปไว้ที่ I5:I13
2. Copy ข้อมูลจาก C5:C13 ไปไว้ที่ U5:U13
3. Copy ข้อมูลจาก E5:E13 ไปไว้ที่ AG5:AG13
4. Copy ข้อมูลจาก G5:G13 ไปไว้ที่ AS5:AS13

แต่ถ้าที่ D2 = YTDFEB ให้
1. Copy ข้อมูลจาก B5:B13 ไปไว้ที่ J5:J13
2. Copy ข้อมูลจาก C5:C13 ไปไว้ที่ V5:V13
3. Copy ข้อมูลจาก E5:E13 ไปไว้ที่ AH5:AH13
4. Copy ข้อมูลจาก G5:G13 ไปไว้ที่ AT5:AT13

โดยดิฉันได้เขียน code ดังนี้คะ

Code: Select all

Private Sub CommandButton1_Click()
    Application.Goto reference:="STPA1"
    Selection.Copy
    Application.Goto reference:="TTPA1"
    Selection.PasteSpecial Paste:=xlPasteValues
  
    Application.Goto reference:="STPA2"
    Selection.Copy
    Application.Goto reference:="TTPA2"
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.Goto reference:="STPA3"
    Selection.Copy
    Application.Goto reference:="TTPA3"
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.Goto reference:="STPA4"
    Selection.Copy
    Application.Goto reference:="TTPA4"
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.CutCopyMode = False
    ActiveSheet.Range("D2").Select
End Sub
เมื่อดิฉันลองเลือกที่ D2 = YTDJAN ได้ผลลัพธ์ ดังนี้คะ
ข้อมูลจาก G5:G13 ไปอยู่ที่ I5:I13 แต่ผลลัพธ์ที่ต้องการคือ ให้
1. Copy ข้อมูลจาก B5:B13 ไปไว้ที่ I5:I13
2. Copy ข้อมูลจาก C5:C13 ไปไว้ที่ U5:U13
3. Copy ข้อมูลจาก E5:E13 ไปไว้ที่ AG5:AG13
4. Copy ข้อมูลจาก G5:G13 ไปไว้ที่ AS5:AS13

รบกวนท่านผุ้รู้ช่วยแนะนำด้วยคะ

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 8:57 am
by niwat2811
ลองแบบนี้ดูว่าตรงกับความต้องการไหมครับ

Code: Select all

Private Sub CommandButton1_Click()
    Select Case Range("D2").Value

        Case "YTDJAN"

        Range("I5:I13").Value = Range("B5:B13").Value
        Range("U5:U13").Value = Range("C5:C13").Value
        Range("AG5:AG13").Value = Range("E5:E13").Value
        Range("AS5:AS13").Value = Range("G5:G13").Value
        
        Case "YTDFEB"

        Range("J5:J13").Value = Range("B5:B13").Value
        Range("V5:V13").Value = Range("C5:C13").Value
        Range("AH5:AH13").Value = Range("E5:E13").Value
        Range("AT5:AT13").Value = Range("G5:G13").Value

    End Select
End Sub

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 10:33 am
by natthaporn
ขอขอบคุณสำหรับ code ที่แนะนำมาคะ สามารถ run ได้ตามที่ต้องการคะ แต่เนื่องจากข้อมูลมีการเพี่ม row อยู่เป็นประจำ ดิฉันจึงต้องสร้าง range name ของทั้ง source และ target ซึ่งถ้าใช้ code นี้ ใน 1 sheet ดิฉันต้องสร้าง range name = 4 x 2 x 12 = 96 ชื่อ ซึ่งดิฉันมี sheet ที่ต้องทำแบบเดียวกันนี้จำนวน 20 sheet แสดงว่าดิฉันต้องสร้าง range name = 96 x 20 = 1,920 ชื่อ
ที่ดิฉันเข้าใจไม่ทราบว่าถูกต้องหรือเปล่าคะ ถ้าเป็นเช่นนั้น ดิฉันจะขอรบกวนแนะนำในการเขียน code เพื่อที่จะได้ไม่ต้องสร้าง range name จำนวนมาก ๆ ด้วยคะ
ขอบคุณคะ

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 10:42 am
by niwat2811
หากเป็นเช่นนั้นคงต้องรอให้ผู้รู้ท่านอื่นช่วยกรุณาตอบให้แล้วครับ เนื่องจากผมเองก็เพิ่งศึกษา VBA เหมือนกันครับ

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 11:06 am
by natthaporn
ต้องขอรบกวนท่านผู้รู้ช่วยแนะนำด้วยนคะ อย่างไรก็ตามต้องขอขอบคุณคุณ niwat2811 สำหรับคำแนะนำ code ดังกล่าวด้วยคะ

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 2:01 pm
by nattasiray
ต้องเริ่มแก้จากตารางบันทึกข้อมูลก่อนครับ มิฉะนั้นคุณจะทำงานด้วยความไม่สะดวกครับ งานของคุณทำเป็น database ครับ ตรงตารางบันทึกข้อมูลนั้นเพิ่มฟิลด์วันเดือนปีเข้าไป

ส่วนตารางออกรายงาน นั้นให้เพิ่มช่องกรอกปี ช่องกรอกเดือนสุดท้ายที่ต้องการคำนวณ

จากนั้นใช้สูตรพวก SUMIFS กับข้อมูลตัวเลข LOOKUP ดึงข้อมูลมาแสดงครับ

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 2:13 pm
by natthaporn
ขอบคุณสำหรับคำแนะนำคะ เนื่องจากข้อมูลแต่ละ sheet มีจำนวนหลายพันแถว และมีจำนวนหลาย sheet ถ้าใช้สูตรจะทำให้ process ช้าลงหรือเปล่าคะ และในความจริงแล้วยังมี sheet อื่น ๆ ที่มีสูตรอยู่ ดิฉันจึงอย่างให้ข้อมูลนี้เป็น value คะ

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 2:37 pm
by snasui
:D ลองปรับ Code เป็นตามด้านล่างครับ

Code: Select all

Private Sub CommandButton1_Click()
    Dim i As Integer
    
    Select Case Range("D2").Value
        Case "YTDJAN": i = 0
        Case "YTDFEB": i = 1
        Case "YTDMAR": i = 2
        Case "YTDAPR": i = 3
        Case "YTDMAY": i = 4
        Case "YTDJUN": i = 5
        Case "YTDJUL": i = 6
        Case "YTDAUG": i = 7
        Case "YTDSEP": i = 8
        Case "YTDOCT": i = 9
        Case "YTDNOV": i = 10
        Case "YTDDEC": i = 11
    End Select
    
    Application.Goto reference:="STPA1"
    Selection.Copy
    Application.Goto reference:=Range("I5").Offset(0, i)
    Selection.PasteSpecial Paste:=xlPasteValues
  
    Application.Goto reference:="STPA2"
    Selection.Copy
    Application.Goto reference:=Range("U5").Offset(0, i)
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.Goto reference:="STPA3"
    Selection.Copy
    Application.Goto reference:=Range("AG5").Offset(0, i)
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.Goto reference:="STPA4"
    Selection.Copy
    Application.Goto reference:=Range("AS5").Offset(0, i)
    Selection.PasteSpecial Paste:=xlPasteValues
    
    Application.CutCopyMode = False
    ActiveSheet.Range("D2").Select
End Sub

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 5:40 pm
by natthaporn
ได้ผลลัพธ์ตามที่ต้องการแล้วคะ ขอขอบคุณอาจารย์มากคะ ดิฉันได้ความรู้เพิ่มขึ้นอีกแล้วคะ ถ้าอาจารย์ไม่ว่าอะไร ดิฉันขอนับถืออาจารย์เป็น "ครู" ของดิฉันอีกคนนะคะ ขอชื่นชมอีกครั้งสำหรับ web ดี ๆ อย่างนี้ ขอให้อยู่ไปนาน ๆ มีคนเข้ามาแชร์และศึกษาหาความรู้เยอะ ๆ นะคะ

ขอบคุณคะ

Re: รบกวนสอบถาม code vba copy ข้อมูลแบบหลายช่วง

Posted: Tue May 14, 2013 6:11 pm
by snasui
:D ท่านใดที่เป็นผู้ให้ความรู้ ชี้แนะแนวทางที่ถูกต้องให้กับเรา ถือได้ว่าเป็นครูของเราได้ทั้งนั้นครับ :P