:D snasui.com ยินดีต้อนรับ :D
ยินดีต้อนรับสู่กระดานถามตอบ Excel and VBA และอื่น ๆ ที่เป็นมิตรกับทุกท่าน มีไฟล์แนบมหาศาล ช่วยให้ท่านค้นหาและติดตามศึกษาได้โดยง่าย :thup: สมาชิกท่านใดที่ยังไม่ได้ระบุ Version ของ Excel ที่ใช้งานจริง สามารถทำตาม Link นี้เพื่อจะได้รับคำตอบที่ตรงกับ Version ของท่านครับ :arrow: ระบุ Version ของ Excel
:!: โปรดทราบ :!:
  1. กรุณาอ่านกฎการใช้บอร์ด (Forum rules) ในตำแหน่งด้านบนของแต่ละบอร์ด
  2. การสมัครสมาชิก การ Login การกู้คืนรหัสผ่าน
    1. สมัครสมาชิกดูขั้นตอนได้ที่ :arrow: สมัครสมาชิก
    2. Login เข้าระบบโดยคลิกปุ่ม Login ตรงมุมขวาบนของหน้านี้ :roll:
    3. การ Login ผ่าน Facebook ดูวิธีที่ :arrow: Login ผ่าน Facebook
    4. ลืมรหัสผ่านสามารถรับรหัสใหม่ได้ที่ :arrow: Reset รหัสผ่าน
  3. มีปัญหาการใช้งาน แจ้งผู้ดูแลระบบได้ที่ :arrow: ติดต่อผู้ดูแลระบบ
  4. กำหนดการตั้งค่าส่วนตัว เช่นตั้งค่าภาษาเป็นไทยหรืออังกฤษดูได้ที่ :arrow: ตั้งค่าส่วนตัว
  5. การตั้งและตอบกระทู้ดูได้ที่ :arrow: วิธีการตั้งและตอบกระทู้
  6. การจัดรูปแบบตัวอักษรด้วย bbcode ในช่องแสดงความคิดเห็นดูได้ที่ :arrow: จัดรูปแบบตัวอักษร
  7. กำหนดขนาดตัวอักษรใน Browser ดูได้ที่ :arrow: กำหนดขนาดตัวอักษรใน Browser

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

ฟอรัมถาม-ตอบปัญหาการใช้งาน Macro และ VBA
Forum rules
  1. ไม่อนุญาตให้ใช้ภาษาแชทในการถามและตอบปัญหา ไม่ใช้คำว่า "คับ" หรือ "อ่ะครับ" แทนคำว่า "ครับ" ไม่ใช้คำว่า "เด๋ว" แทนคำว่า "เดี๋ยว" เป็นต้น เนื่องจากเมื่อแปลเป็นภาษาต่างประเทศแล้วจะให้ความหมายผิดไปจากที่ควรจะเป็น
  2. ห้ามถามโดยระบุชื่อผู้ตอบและต้องตั้งชื่อกระทู้ให้สื่อถึงปัญหาที่จะถาม ไม่ตั้งชื่อว่า ช่วยด้วยครับ, มีปัญหามาปรึกษาครับ เป็นต้น
  3. กรุณาอธิบายปัญหาและระบุคำตอบที่ต้องการมาในกระทู้ด้วยเสมอถึงแม้จะอธิบายไว้ในไฟล์แนบแล้วก็ตาม ทั้งนี้เพื่ออำนวยความสะดวกแก่เพื่อนสมาชิกในการค้นหาข้อมูล
  4. กรุณาแนบไฟล์ตัวอย่างพร้อมแสดงคำตอบที่ถูกต้องมาในไฟล์ด้วยเพื่อให้ง่ายต่อการทำความเข้าใจและสะดวกต่อการตอบคำถาม (ขนาดไฟล์ไม่เกิน 500Kb ขนาดภาพไม่เกิน 800*600 Pixel) ไม่แนบเป็น Link มาจากแหล่งอื่นที่อาจจะถูกลบทิ้งไปโดยต้นทางในภายหลัง นอกจากนี้ไม่ควรแนบไฟล์ที่มีข้อมูลสำคัญอันก่อให้เกิดความเสียหายกับตนเองและผู้อื่น
  5. กรณีเป็นคำถามเกี่ยวกับ Programming เช่น VBA, VB.Net, C#, SQL ฯลฯ ต้องลองเขียนมาเองก่อนเสมอ ถามเฉพาะที่ติดปัญหา ระบุ Module, Procedure ที่ติดปัญหาให้ชัดเจน กรุณาโพสต์ Code ให้แสดงเป็น Code คือเปิดด้วย [code] และปิดด้วย [/code] ตัวอย่างเช่น [code]dim r as range[/code] เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)
  6. กรุณาแจ้งผลการใช้งานเมื่อได้รับคำตอบว่าตรงกับความต้องการหรือไม่
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#1

Post 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

รบกวนท่านผุ้รู้ช่วยแนะนำด้วยคะ
Attachments
VBA-Copy.xlsm
(42.02 KiB) Downloaded 27 times
niwat2811
Bronze
Bronze
Posts: 350
Joined: Thu Jan 06, 2011 12:51 pm
Excel Ver: 2016

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

#2

Post 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
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#3

Post 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 จำนวนมาก ๆ ด้วยคะ
ขอบคุณคะ
niwat2811
Bronze
Bronze
Posts: 350
Joined: Thu Jan 06, 2011 12:51 pm
Excel Ver: 2016

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

#4

Post by niwat2811 »

หากเป็นเช่นนั้นคงต้องรอให้ผู้รู้ท่านอื่นช่วยกรุณาตอบให้แล้วครับ เนื่องจากผมเองก็เพิ่งศึกษา VBA เหมือนกันครับ
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#5

Post by natthaporn »

ต้องขอรบกวนท่านผู้รู้ช่วยแนะนำด้วยนคะ อย่างไรก็ตามต้องขอขอบคุณคุณ niwat2811 สำหรับคำแนะนำ code ดังกล่าวด้วยคะ
nattasiray
Bronze
Bronze
Posts: 284
Joined: Thu Feb 11, 2010 8:32 pm
Contact:

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

#6

Post by nattasiray »

ต้องเริ่มแก้จากตารางบันทึกข้อมูลก่อนครับ มิฉะนั้นคุณจะทำงานด้วยความไม่สะดวกครับ งานของคุณทำเป็น database ครับ ตรงตารางบันทึกข้อมูลนั้นเพิ่มฟิลด์วันเดือนปีเข้าไป

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

จากนั้นใช้สูตรพวก SUMIFS กับข้อมูลตัวเลข LOOKUP ดึงข้อมูลมาแสดงครับ
ณัฐศิระ เยาวสุต
(N. Yauvasuta)
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#7

Post by natthaporn »

ขอบคุณสำหรับคำแนะนำคะ เนื่องจากข้อมูลแต่ละ sheet มีจำนวนหลายพันแถว และมีจำนวนหลาย sheet ถ้าใช้สูตรจะทำให้ process ช้าลงหรือเปล่าคะ และในความจริงแล้วยังมี sheet อื่น ๆ ที่มีสูตรอยู่ ดิฉันจึงอย่างให้ข้อมูลนี้เป็น value คะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#8

Post 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
natthaporn
Member
Member
Posts: 187
Joined: Sun Jul 15, 2012 10:54 pm

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

#9

Post by natthaporn »

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

ขอบคุณคะ
User avatar
snasui
Site Admin
Site Admin
Posts: 31253
Joined: Sun Jan 24, 2010 12:33 pm
Location: Songkhla, Thailand
Excel Ver: 2010, 2019
Contact:

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

#10

Post by snasui »

:D ท่านใดที่เป็นผู้ให้ความรู้ ชี้แนะแนวทางที่ถูกต้องให้กับเรา ถือได้ว่าเป็นครูของเราได้ทั้งนั้นครับ :P
Post Reply